Saya mencoba menggunakan LINQ untuk membuat Dictionary<string, List<CustomObject>>
dari List<CustomObject>
. Saya bisa membuatnya bekerja menggunakan "var", tetapi saya tidak ingin menggunakan tipe anonim. Inilah yang saya miliki
var x = (from CustomObject o in ListOfCustomObjects
group o by o.PropertyName into t
select t.ToList());
Saya juga telah mencoba menggunakan Cast<>()
dari perpustakaan LINQ sekali saya miliki x
, tapi saya mendapatkan masalah kompilasi yang hasilnya menjadi pemain yang tidak valid.
linq
dictionary
Atari2600
sumber
sumber
var
tidak menggunakan tipe "anonim", itu menggunakan tipe "implisit". Tipe anonim adalah kelas baru yang dibuat oleh kompiler untuk menangani konstruksinew { thing = "stuff" };
. Jenis implisit adalah kelas yang ada,var
hanya cara yang mudah untuk referensi mereka ketika variabel ditugaskan segera, tipe variabel dapat disimpulkan dari jenis objek yang ditugaskan padanya. Anda bahkan dapat secara implisit mengetik variabel yang merujuk pada tipe anonim, yaitu:var a = new { thing = "stuff" };
Jawaban:
sumber
.GroupBy(o => o.PropertyName).ToDictionary(g => g.Key, g => g.ToList())
Ini bisa menjadi bagian dari ekstensi ekstensi Linq. jadi kita hanya perlu melakukan.ToDictionary(o=>o.PropertyName)
ToDictionary
denganToLookup
.Saya tidak dapat mengomentari @Michael Blackburn, tetapi saya kira Anda mendapatkan downvote karena GroupBy tidak diperlukan dalam kasus ini.
Gunakan seperti:
Selain itu, saya telah melihat ini berkinerja lebih baik daripada ketika menggunakan GroupBy (). ToDictionary ().
sumber
Untuk @ atari2600, inilah yang akan terlihat seperti jawaban menggunakan ToLookup dalam sintaks lambda:
Pada dasarnya, dibutuhkan IGrouping dan mewujudkannya untuk Anda ke dalam kamus daftar, dengan nilai-nilai PropertyName sebagai kuncinya.
sumber
ToLookup
memiliki kelebihan yang akan menyelesaikan pekerjaan.Berikut ini bekerja untuk saya.
sumber