Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
Projeksiyon, bir nesneyi genellikle yalnızca daha sonra kullanılacak özelliklerden oluşan yeni bir forma dönüştürme işlemini ifade eder. Projeksiyonu kullanarak, her nesneden oluşturulan yeni bir tür oluşturabilirsiniz. Bir özelliği yansıtabilir ve üzerinde matematiksel bir işlev gerçekleştirebilirsiniz. Özgün nesneyi değiştirmeden de yansıtabilirsiniz.
Projeksiyon gerçekleştiren standart sorgu işleci yöntemleri aşağıdaki bölümde listelenmiştir.
Yöntemler
| Yöntem Adı | Açıklama | Visual Basic Sorgu İfadesi Dizilimi | Daha Fazla Bilgi |
|---|---|---|---|
| Seç | Dönüştürme işlevi üzerine kurulu değerleri projeler. | Select |
Enumerable.Select Queryable.Select |
| SelectMany | Bir dönüştürme işlevine dayalı değer dizilerini yansıtır ve ardından bunları tek bir dizinin içine birleştirir. | Birden fazla From yan tümce kullan |
Enumerable.SelectMany Queryable.SelectMany |
| Zip | Belirtilen 2-3 diziden öğeler içeren bir demet dizisi oluşturur. | Uygulanamaz. | Enumerable.Zip Queryable.Zip |
Sorgu İfade Sözdizimi Örnekleri
Seç
Aşağıdaki örnek, Select tümcesini kullanarak dize listesindeki her dizeden ilk harfi projeksiyon yapmak için kullanır.
Dim words = New List(Of String) From {"an", "apple", "a", "day"}
Dim query = From word In words
Select word.Substring(0, 1)
Dim sb As New System.Text.StringBuilder()
For Each letter As String In query
sb.AppendLine(letter)
Next
' Display the output.
MsgBox(sb.ToString())
' This code produces the following output:
' a
' a
' a
' d
SelectMany
Aşağıdaki örnek, her dizedeki her sözcüğü bir dize listesinde yansıtmak için birden çok From yan tümce kullanır.
Dim phrases = New List(Of String) From {"an apple a day", "the quick brown fox"}
Dim query = From phrase In phrases
From word In phrase.Split(" "c)
Select word
Dim sb As New System.Text.StringBuilder()
For Each str As String In query
sb.AppendLine(str)
Next
' Display the output.
MsgBox(sb.ToString())
' This code produces the following output:
' an
' apple
' a
' day
' the
' quick
' brown
' fox
Select ve SelectMany karşılaştırması
Hem Select() hem de SelectMany() öğesinin çalışması, kaynak değerlerden bir sonuç değeri (veya değerler) üretmektir.
Select() her kaynak değer için bir sonuç değeri üretir. Bu nedenle genel sonuç, kaynak koleksiyonla aynı sayıda öğeye sahip bir koleksiyondur. Buna karşılık, SelectMany() her kaynak değerinden birleştirilmiş alt koleksiyonlar içeren tek bir genel sonuç üretir. Transform fonksiyonu, SelectMany() bağımsız değişken olarak geçildiğinde, her kaynak değer için numaralandırılabilir bir değer dizisi döndürmelidir. Bu numaralandırılabilir diziler daha sonra tarafından SelectMany() birleştirilir ve büyük bir dizi oluşturulur.
Aşağıdaki iki çizimde, bu iki yöntemin eylemleri arasındaki kavramsal fark gösterilmektedir. Her durumda selector (transform) işlevinin her kaynak değerden çiçek dizisini seçtiğini varsayalım.
Bu çizimde, kaynak koleksiyonla aynı sayıda öğeye sahip bir koleksiyonun nasıl Select() döndürüldüğü gösterilmektedir.
Bu çizimde, dizilerin ara dizisinin her ara dizideki her değeri içeren son bir sonuç değeriyle nasıl SelectMany() birleştirildiği gösterilmektedir.
Kod Örneği
Aşağıdaki örnek, Select() ve SelectMany()'in davranışlarını karşılaştırır. Kod, kaynak koleksiyondaki her çiçek adı listesinden öğeleri alarak bir "buket" çiçek oluşturur. Bu örnekte, dönüştürme işlevinin Select<TSource,TResult>(IEnumerable<TSource>, Func<TSource,TResult>) kullandığı "tek değer", bir değer koleksiyonudur. Bu, her alt dizideki her dizeyi listelemek için ek For Each döngü gerektirir.
Class Bouquet
Public Flowers As List(Of String)
End Class
Sub SelectVsSelectMany()
Dim bouquets = New List(Of Bouquet) From {
New Bouquet With {.Flowers = New List(Of String)(New String() {"sunflower", "daisy", "daffodil", "larkspur"})},
New Bouquet With {.Flowers = New List(Of String)(New String() {"tulip", "rose", "orchid"})},
New Bouquet With {.Flowers = New List(Of String)(New String() {"gladiolis", "lily", "snapdragon", "aster", "protea"})},
New Bouquet With {.Flowers = New List(Of String)(New String() {"larkspur", "lilac", "iris", "dahlia"})}}
Dim output As New System.Text.StringBuilder
' Select()
Dim query1 = bouquets.Select(Function(b) b.Flowers)
output.AppendLine("Using Select():")
For Each flowerList In query1
For Each str As String In flowerList
output.AppendLine(str)
Next
Next
' SelectMany()
Dim query2 = bouquets.SelectMany(Function(b) b.Flowers)
output.AppendLine(vbCrLf & "Using SelectMany():")
For Each str As String In query2
output.AppendLine(str)
Next
' Display the output
MsgBox(output.ToString())
' This code produces the following output:
'
' Using Select():
' sunflower
' daisy
' daffodil
' larkspur
' tulip
' rose
' orchid
' gladiolis
' lily
' snapdragon
' aster
' protea
' larkspur
' lilac
' iris
' dahlia
' Using SelectMany()
' sunflower
' daisy
' daffodil
' larkspur
' tulip
' rose
' orchid
' gladiolis
' lily
' snapdragon
' aster
' protea
' larkspur
' lilac
' iris
' dahlia
End Sub
Ayrıca bakınız
- System.Linq
- Standart Sorgu İşleçlerine Genel Bakış (Visual Basic)
- Seçim Deyimi
- Nasıl yapılır: Verileri Bağlantılarla Birleştirme
- Nasıl yapılır: Birden Çok Kaynaktan Nesne Koleksiyonlarını Doldurma (LINQ) (Visual Basic)
- Nasıl yapılır: LinQ Sorgu Sonucunu Belirli Bir Tür Olarak Döndürme
- Nasıl yapılır: Grupları Kullanarak Bir Dosyayı Birçok Dosyaya Bölme (LINQ) (Visual Basic)