Ini cukup sederhana tapi saya bingung: Mengingat tipe data ini:
UserInfo(name, metric, day, other_metric)
dan kumpulan data sampel ini:
joe 1 01/01/2011 5
jane 0 01/02/2011 9
john 2 01/03/2011 0
jim 3 01/04/2011 1
jean 1 01/05/2011 3
jill 2 01/06/2011 5
jeb 0 01/07/2011 3
jenn 0 01/08/2011 7
Saya ingin mengambil tabel yang mencantumkan metrik secara berurutan (0,1,2,3 ..) dengan jumlah total kali penghitungan terjadi. Jadi dari set ini Anda akan berakhir dengan:
0 3
1 2
2 2
3 1
Saya bergulat dengan sintaks LINQ tetapi saya terjebak di mana harus meletakkan groupby dan menghitung .... ada bantuan ??
Edit POST: Saya tidak pernah bisa mendapatkan jawaban yang diposting untuk bekerja karena mereka selalu mengembalikan satu catatan dengan jumlah hitungan yang berbeda. Namun saya bisa mengumpulkan contoh LINQ to SQL yang berhasil:
var pl = from r in info
orderby r.metric
group r by r.metric into grp
select new { key = grp.Key, cnt = grp.Count()};
Hasil ini memberi saya satu set catatan terurut dengan 'metrik' dan jumlah pengguna yang terkait dengan masing-masing. Saya jelas baru di LINQ secara umum dan di mata saya yang tidak terlatih, pendekatan ini tampaknya sangat mirip dengan pendekatan LINQ murni namun memberi saya jawaban yang berbeda.
Jawaban:
Setelah menelepon
GroupBy
, Anda mendapatkan serangkaian grupIEnumerable<Grouping>
, di mana masing-masing Pengelompokan itu sendiri memperlihatkan yangKey
digunakan untuk membuat grup dan juga merupakanIEnumerable<T>
item apa pun yang ada dalam kumpulan data asli Anda. Anda hanya perlu memanggilCount()
Pengelompokan itu untuk mendapatkan subtotal.Saya berasumsi Anda sudah memiliki daftar / array beberapa
class
yang terlihat sepertiKetika Anda melakukannya
data.GroupBy(x => x.metric)
, itu berarti "untuk setiap elemenx
dalam IEnumerable yang ditentukan olehdata
, hitung.metric
, lalu kelompokkan semua elemen dengan metrik yang sama ke dalamGrouping
dan kembalikanIEnumerable
semua grup yang dihasilkan. Diberikan contoh kumpulan data Anda dariitu akan menghasilkan hasil berikut setelah grup oleh:
sumber
Dengan asumsi
userInfoList
adalahList<UserInfo>
:Fungsi lambda untuk
GroupBy()
,n => n.metric
berarti akan mendapatkan bidangmetric
dari setiapUserInfo
objek yang ditemui. Jenisn
tergantung pada konteksnya, pada kejadian pertama jenisnyaUserInfo
, karena daftar berisiUserInfo
objek. Pada kejadian keduan
adalah tipeGrouping
, karena sekarang daftarGrouping
objek.Grouping
Ada metode ekstensi seperti.Count()
,.Key()
dan cukup banyak hal lain yang Anda harapkan. Sama seperti Anda akan memeriksa.Lenght
padastring
, Anda dapat memeriksa.Count()
grup.sumber
sumber
group.key
dalam Pilih (...) harusgroup.Key