Aracılığıyla paylaş


Projeksiyon İşlemleri

Projeksiyon genellikle yalnızca sonradan kullanılacak özelliklerinin oluşan yeni bir forma bir nesneye dönüştürme işlemi gösterir.Projeksiyon kullanarak, her nesneden oluşturulmuş yeni bir tür gerçekleştirebilmesi.Bir özellik proje ve matematiksel işlevi üzerinde gerçekleştirebilirsiniz.Orijinal nesneyi değiştirmeden de planlayabilirsiniz.

Projeksiyon gerçekleştiren standart sorgu işleci yöntemleri aşağıdaki bölümünde listelenir.

Yöntemler

Yöntem adı

Description

C# sorgu ifade sözdizimi

Visual BasicSorgu ifade sözdizimi

Daha Fazla Bilgi

Seç

Bir dönüşüm işlevine bağlı projeler değerleri.

select

Select

Enumerable.Select``2

Queryable.Select``2

SelectMany

Projeleri bir dönüştürme işlevini temel alır ve bunları bir sýraya düzleştirir değerleri dizisi.

Birden çok kullanmak from yan tümceleri

Birden çok kullanmak From yan tümceleri

Enumerable.SelectMany``2

Queryable.SelectMany``2

Sorgu ifade sözdizimi örnekleri

Seç

Aşağıdaki örnek select C# [NULL]'ta yan tümcesi veya Select yan tümcesinde Visual Basic her dize, bir dizgi listesi ilk harfinden proje.

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
            List<string> words = new List<string>() { "an", "apple", "a", "day" };

            var query = from word in words
                        select word.Substring(0, 1);

            foreach (string s in query)
                Console.WriteLine(s);

            /* This code produces the following output:

                a
                a
                a
                d
            */

SelectMany

Aşağıdaki örnek, birden çok kullanır from C# [NULL]'ta yan tümceleri veya From yan tümcelerini Visual Basic her sözcüğün her dize bir dizgi listesi, proje için.

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
            List<string> phrases = new List<string>() { "an apple a day", "the quick brown fox" };

            var query = from phrase in phrases
                        from word in phrase.Split(' ')
                        select word;

            foreach (string s in query)
                Console.WriteLine(s);

            /* This code produces the following output:

                an
                apple
                a
                day
                the
                quick
                brown
                fox
            */

SelectMany karşı seçin

Her iki iş Select() ve SelectMany() bir sonuç değerini (veya değerler) üretmek için kaynak değerleri olan.**Select()**her kaynak değeri için bir sonuç değeri üretir.Genel sonuç bu nedenle kaynak topluluğunun aynı sayıda öğe içeren bir gruptur.Buna karşılık, SelectMany() her kaynak değerinden art arda eklenmiş sub-collections içeren tek bir genel sonuç üretir.Bağımsız değişken olarak geçirilen dönüştürme işlevi SelectMany() her kaynak değeri değerleri sýralanabilir bir dizi döndürmelidir.Bu sýralanabilir sıraları sonra tarafından birleşir SelectMany() büyük bir sıra oluşturmak için.

Aşağıdaki iki çizimde eylemlerini bu iki yöntem arasındaki kavramsal farkı gösterir.Her durumda, seçici (dönüşüm) işlevi Çiçekleri dizisi her kaynak değeri seçer varsayalım.

Bu resimde yer veriliyor nasıl Select() kaynak topluluğunun aynı sayıda öğe içeren bir koleksiyon döndürür.

Select() öğesinin eyleminin kavramsal gösterimi

Bu resimde yer veriliyor nasıl SelectMany() diziler Ara sıra her ara diziden her değeri içeren bir sonuç değeri olarak birleştirir.

SelectMany() öğesinin eylemini gösteren grafik.

Kod örneği

Aşağıdaki örnek davranışı karşılaştırır Select() ve SelectMany().Kod kaynağı koleksiyonunda ilk iki öğe her çiçek adları listesinden yararlanarak çiçek "Buket" oluşturur.Bu örnekte, "tek değer", dönüştürme işlevi Select``2(IEnumerableUMP, FuncUMP, UMP) kullanımdır kendisini değerler koleksiyonu.Bu ekstra gerektirir foreach (For Each , Visual Basic) her dize, her sub-sequence numaralandırmak için döngü.

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
class Bouquet
{
    public List<string> Flowers { get; set; }
}

static void SelectVsSelectMany()
{
    List<Bouquet> bouquets = new List<Bouquet>() {
        new Bouquet { Flowers = new List<string> { "sunflower", "daisy", "daffodil", "larkspur" }},
        new Bouquet{ Flowers = new List<string> { "tulip", "rose", "orchid" }},
        new Bouquet{ Flowers = new List<string> { "gladiolis", "lily", "snapdragon", "aster", "protea" }},
        new Bouquet{ Flowers = new List<string> { "larkspur", "lilac", "iris", "dahlia" }}
    };

    // *********** Select ***********            
    IEnumerable<List<string>> query1 = bouquets.Select(bq => bq.Flowers);

    // ********* SelectMany *********
    IEnumerable<string> query2 = bouquets.SelectMany(bq => bq.Flowers);

    Console.WriteLine("Results by using Select():");
    // Note the extra foreach loop here. 
    foreach (IEnumerable<String> collection in query1)
        foreach (string item in collection)
            Console.WriteLine(item);

    Console.WriteLine("\nResults by using SelectMany():");
    foreach (string item in query2)
        Console.WriteLine(item);

    /* This code produces the following output:

       Results by using Select():
        sunflower
        daisy
        daffodil
        larkspur
        tulip
        rose
        orchid
        gladiolis
        lily
        snapdragon
        aster
        protea
        larkspur
        lilac
        iris
        dahlia

       Results by using SelectMany():
        sunflower
        daisy
        daffodil
        larkspur
        tulip
        rose
        orchid
        gladiolis
        lily
        snapdragon
        aster
        protea
        larkspur
        lilac
        iris
        dahlia
    */

}

Ayrıca bkz.

Görevler

Nasıl yapılır: Birleştirmeleri Kullanarak Verileri LINQ İle Birleştirme (Visual Basic)

Nasıl yapılır: Birden Fazla Kaynaktan Nesne Koleksiyonları Doldurma (LINQ)

Nasıl yapılır: Bir LINQ Sorgu Sonucunu Belirli Bir Tür Olarak Döndürme (Visual Basic)

Nasıl Yapılır: Gruplar Kullanarak Bir Dosyayı Birden Çok Dosyaya Bölme (LINQ)

Başvuru

select tümcesi (C# Başvurusu)

Select Tümcesi (Visual Basic)

System.Linq

Kavramlar

Standart Sorgu İşleçlerine Genel Bakış