Pertanyaan Perbedaan Antara Pilih dan Pilih Banyak


Saya sudah mencari perbedaan antara Select dan SelectMany tetapi saya belum dapat menemukan jawaban yang sesuai. Saya perlu belajar perbedaan ketika menggunakan LINQ To SQL tetapi semua yang saya temukan adalah contoh larik standar.

Dapatkah seseorang memberikan contoh LINQ to SQL?


796
2018-06-06 03:54


asal


Jawaban:


SelectMany mendatar kueri yang mengembalikan daftar daftar. Sebagai contoh

public class PhoneNumber
{
    public string Number { get; set; }
}

public class Person
{
    public IEnumerable<PhoneNumber> PhoneNumbers { get; set; }
    public string Name { get; set; }
}

IEnumerable<Person> people = new List<Person>();

// Select gets a list of lists of phone numbers
IEnumerable<IEnumerable<PhoneNumber>> phoneLists = people.Select(p => p.PhoneNumbers);

// SelectMany flattens it to just a list of phone numbers.
IEnumerable<PhoneNumber> phoneNumbers = people.SelectMany(p => p.PhoneNumbers);

// And to include data from the parent in the result: 
// pass an expression to the second parameter (resultSelector) in the overload:
var directory = people
   .SelectMany(p => p.PhoneNumbers,
               (parent, child) => new { parent.Name, child.Number });

Demo Live di .NET Fiddle


1283
2018-06-06 05:23



Pilih banyak seperti cross join operation dalam SQL di mana dibutuhkan produk silang.
Misalnya jika kita punya

Set A={a,b,c}
Set B={x,y}

Pilih banyak yang bisa digunakan untuk mendapatkan set berikut

{ (x,a) , (x,b) , (x,c) , (y,a) , (y,b) , (y,c) }

Perhatikan bahwa di sini kita mengambil semua kombinasi yang mungkin yang dapat dibuat dari unsur-unsur himpunan A dan mengatur B.

Berikut ini contoh LINQ yang bisa Anda coba

List<string> animals = new List<string>() { "cat", "dog", "donkey" };
List<int> number = new List<int>() { 10, 20 };

var mix = number.SelectMany(num => animals, (n, a) => new { n, a });

campuran akan memiliki elemen-elemen berikut dalam struktur datar seperti

{(10,cat), (10,dog), (10,donkey), (20,cat), (20,dog), (20,donkey)}

142
2017-10-23 16:37



enter image description here

var players = db.SoccerTeams.Where( c=> c.Country == "Spain")
                            .SelectMany( c => c.players);

foreach(var player in players)
{
    Console.WriteLine( player.LastName);
}
  1. Ronaldo
  2. Messi
  3. Fabregas
  4. Bal
  5. Casillas

...


81
2017-10-30 18:31



SelectMany() memungkinkan Anda menciutkan urutan multidimensi dengan cara yang seharusnya membutuhkan waktu satu detik Select() atau lingkaran.

Detail lebih lanjut tentang ini posting blog.


66
2018-06-06 04:42



Ada beberapa kelebihan untuk SelectMany. Salah satunya memungkinkan Anda untuk melacak hubungan antara orang tua dan anak-anak saat melintasi hierarki.

Contoh: misalkan Anda memiliki struktur berikut: League -> Teams -> Player.

Anda dapat dengan mudah mengembalikan koleksi pemain yang datar. Namun Anda mungkin kehilangan referensi apa pun ke tim yang menjadi bagian dari pemutar.

Untungnya ada kelebihan beban untuk tujuan tersebut:

var teamsAndTheirLeagues = 
         from helper in leagues.SelectMany
               ( l => l.Teams
                 , ( league, team ) => new { league, team } )
                      where helper.team.Players.Count > 2 
                           && helper.league.Teams.Count < 10
                           select new 
                                  { LeagueID = helper.league.ID
                                    , Team = helper.team 
                                   };

Contoh sebelumnya diambil dari Blog Dan's IK. Saya sangat menyarankan Anda untuk melihatnya.


31
2018-06-06 04:04



Saya memahami SelectMany berfungsi seperti shortcut bergabung.

Jadi kamu bisa:

var orders = customers
             .Where(c => c.CustomerName == "Acme")
             .SelectMany(c => c.Orders);

18
2017-09-25 09:32



Pilih adalah proyeksi satu-ke-satu sederhana dari elemen sumber ke elemen hasil. Memilih- Banyak digunakan ketika ada beberapa dari klausa dalam ekspresi query: setiap elemen dalam urutan asli digunakan untuk menghasilkan urutan baru.


12
2017-08-27 19:52