Visual Basic Linq Single Kullanımı
Visual Basic dilinde, Linq bileşeni içindeki Single() metodu, koleksiyondaki belirli bir koşulu karşılayan tek öğeyi döndürür.
Single() metodunu kullanırken dikkat edilmesi gereken nokta, koleksiyonda koşulu karşılayan yalnızca tek bir öğenin olması gerektiğidir. Single () metodu için koşulu sağlayan birden fazla öğe varsa veya hiçbir öğe yoksa exception yaratılır.
Aşağıdaki örneği inceleyelim..
İlk olarak koleksiyonumuzun (collection) oluşturulduğu Ogrenci ve Sinif class larımızı hazırlayalım.
Class Ogrenci
Public Property Id As Integer
Public Property Ad As String
End Class
Class Sinif
Public ReadOnly ogrenciler As List(Of Ogrenci)
Public Sub New()
Me.ogrenciler = OgrenciYarat().ToList()
End Sub
Private Iterator Function OgrenciYarat() As IEnumerable(Of Ogrenci)
Yield New Ogrenci With { .Id = 1, .Ad = "Ali" }
Yield New Ogrenci With { .Id = 2, .Ad = "Erdem" }
Yield New Ogrenci With { .Id = 3, .Ad = "Ayşe" }
Yield New Ogrenci With { .Id = 4, .Ad = "Lale" }
Yield New Ogrenci With { .Id = 5, .Ad = "Gül" }
Yield New Ogrenci With { .Id = 6, .Ad = "Osman" }
Yield New Ogrenci With { .Id = 7, .Ad = "Irmak" }
Yield New Ogrenci With { .Id = 8, .Ad = "Tarık" }
Yield New Ogrenci With { .Id = 9, .Ad = "Osman" }
End Function
End Class
Oluşturulan sınıflarımızla birlikte Single() metodumuzu kullanalım.
Dim sinif As Sinif = New Sinif()
Dim kayit = sinif.ogrenciler.Single(Function(x) x.Ad = "Ali")
Dim kayit2 = sinif.ogrenciler.Single(Function(x) x.Ad = "Osman")
Örnekte "kayit" değişkenimize adının "Ali" olması koşulunun sağlandığı bir kayıt atadık. Bu koşulu sağlayan sadece 1 kayıt olduğu için Single() metodu sorunsuz çalıştı.
İkinci örneğimizde "kayit2" değişkenimize adının "Osman" olması koşulunun sağlandığı bir kayıt atamaya çalıştık. Bu koşulu sağlayan 2 kayıdımız olduğu için işlem başarısız oldu ve aşağıdaki hatayı aldık.
Sequence contains more than one matching element
"Sıra birden fazla eşleşen öğe içeriyor"
Tüm koda aşağıdan ulaşabilirsiniz..
Module ModuleTest
Sub Main()
Dim sinif As Sinif = New Sinif()
Dim kayit = sinif.ogrenciler.Single(Function(x) x.Ad = "Ali")
Dim kayit2 = sinif.ogrenciler.Single(Function(x) x.Ad = "Osman")
End Sub
End Module
Class Ogrenci
Public Property Id As Integer
Public Property Ad As String
End Class
Class Sinif
Public ReadOnly ogrenciler As List(Of Ogrenci)
Public Sub New()
Me.ogrenciler = OgrenciYarat().ToList()
End Sub
Private Iterator Function OgrenciYarat() As IEnumerable(Of Ogrenci)
Yield New Ogrenci With { .Id = 1, .Ad = "Ali" }
Yield New Ogrenci With { .Id = 2, .Ad = "Erdem" }
Yield New Ogrenci With { .Id = 3, .Ad = "Ayşe" }
Yield New Ogrenci With { .Id = 4, .Ad = "Lale" }
Yield New Ogrenci With { .Id = 5, .Ad = "Gül" }
Yield New Ogrenci With { .Id = 6, .Ad = "Osman" }
Yield New Ogrenci With { .Id = 7, .Ad = "Irmak" }
Yield New Ogrenci With { .Id = 8, .Ad = "Tarık" }
Yield New Ogrenci With { .Id = 9, .Ad = "Osman" }
End Function
End Class