Saya telah mencari perbedaan antara Select
dan SelectMany
tetapi saya belum dapat menemukan jawaban yang cocok. Saya perlu mempelajari perbedaannya ketika menggunakan LINQ To SQL tetapi yang saya temukan hanyalah contoh array standar.
Dapatkah seseorang memberikan contoh LINQ To SQL?
c#
linq-to-sql
linq
Tarik
sumber
sumber
Jawaban:
SelectMany
meratakan kueri yang mengembalikan daftar daftar. Sebagai contohDemo langsung di .NET Fiddle
sumber
Pilih banyak seperti operasi lintas bergabung dalam SQL di mana dibutuhkan produk silang.
Misalnya kalau sudah
Pilih banyak yang dapat digunakan untuk mendapatkan set berikut
Perhatikan bahwa di sini kita mengambil semua kemungkinan kombinasi yang dapat dibuat dari elemen himpunan A dan himpunan B.
Ini adalah contoh LINQ yang bisa Anda coba
campuran akan memiliki elemen berikut dalam struktur datar seperti
sumber
SelectMany
adalah . Sebaliknya, ini adalah cara yangSelectMany
dapat digunakan, tetapi sebenarnya bukan cara normal untuk menggunakannya.Where
kondisi setelah SelectMany...
sumber
SelectMany()
memungkinkan Anda menciutkan urutan multidimensi dengan cara yang sebaliknya akan membutuhkan urutan keduaSelect()
atau loop.Lebih detail di posting blog ini .
sumber
Ada beberapa kelebihan
SelectMany
. Salah satunya memungkinkan Anda untuk melacak hubungan apa pun 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 dapat kehilangan referensi ke tim yang menjadi bagian dari pemain.
Untungnya ada kelebihan untuk tujuan tersebut:
Contoh sebelumnya diambil dari blog IK Dan . Saya sangat menyarankan Anda melihatnya.
sumber
Saya mengerti
SelectMany
bekerja seperti pintasan bergabung.Jadi kamu bisa:
sumber
.SelectMany(c => new {c.CompanyName, c.Orders.ShippedDate});
tidak mau bekerja. SelectMany agak meratakan daftar daftar - dan Anda dapat memilih (tetapi hanya satu per satu) daftar yang ada untuk hasilnya. Sebagai perbandingan: Inner gabung di Linq .Select adalah proyeksi satu-ke-satu yang sederhana dari elemen sumber ke elemen hasil. Select- Many digunakan ketika ada beberapa klausa dalam ekspresi kueri: setiap elemen dalam urutan asli digunakan untuk menghasilkan urutan baru.
sumber
Beberapa SelectMany mungkin tidak diperlukan. Di bawah 2 pertanyaan memberikan hasil yang sama.
Untuk hubungan 1-ke-Banyak,
sumber
Tanpa terlalu teknis - basis data dengan banyak Organisasi, masing-masing dengan banyak Pengguna: -
keduanya mengembalikan daftar ApplicationUser yang sama untuk Organisasi yang dipilih.
"Proyek" pertama dari Organisasi ke Pengguna, yang kedua menanyakan tabel Pengguna secara langsung.
sumber
Lebih jelas ketika kueri mengembalikan string (array char):
Misalnya jika daftar 'Buah' mengandung 'apel'
'Pilih' mengembalikan string:
'SelectMany' meratakan string:
sumber
Hanya untuk tampilan alternatif yang dapat membantu beberapa programmer fungsional di luar sana:
Select
adalahmap
SelectMany
adalahbind
(atauflatMap
untuk orang Scala / Kotlin Anda)sumber
Pertimbangkan contoh ini:
Jadi ketika Anda melihat nilai duplikat seperti "I" atau "like" telah dihapus dari query2 karena "SelectMany" meratakan dan memproyeksikan berbagai urutan. Tapi query1 mengembalikan urutan array string. dan karena ada dua array berbeda di query1 (elemen pertama dan kedua), tidak ada yang akan dihapus.
sumber
Satu lagi contoh bagaimana SelectMany + Select dapat digunakan untuk mengumpulkan data objek sub array.
Misalkan kita memiliki pengguna dengan telepon mereka:
Sekarang kita perlu memilih BaseParts semua ponsel dari semua pengguna:
sumber
usersArray.SelectMany(ua => ua.Phones.Select(p => p.BasePart))
Berikut adalah contoh kode dengan koleksi kecil yang diinisialisasi untuk pengujian:
sumber
The
SelectMany
Metode mengetuk turunIEnumerable<IEnumerable<T>>
menjadiIEnumerable<T>
, seperti komunisme, setiap elemen berperilaku dengan cara yang sama (seorang pria bodoh memiliki hak yang sama dari satu genious).sumber
Itu adalah cara terbaik untuk mengerti menurut saya.
Contoh Tabel Perkalian.
sumber