Bagaimana saya bisa melakukan GroupBy Beberapa Kolom di LINQ
Sesuatu yang mirip dengan ini di SQL:
SELECT * FROM <TableName> GROUP BY <Column1>,<Column2>
Bagaimana saya bisa mengonversikan ini ke LINQ:
QuantityBreakdown
(
MaterialID int,
ProductID int,
Quantity float
)
INSERT INTO @QuantityBreakdown (MaterialID, ProductID, Quantity)
SELECT MaterialID, ProductID, SUM(Quantity)
FROM @Transactions
GROUP BY MaterialID, ProductID
Sampel prosedural
sumber
Ok mengerti ini sebagai:
sumber
Untuk Kelompokkan Dengan Banyak Kolom, Coba ini ...
Cara yang sama Anda dapat menambahkan Column3, Column4 dll.
sumber
Result
berisi semua set data yang ditautkan ke semua kolom. Terima kasih banyak!Karena C # 7 Anda juga dapat menggunakan nilai tupel:
atau
sumber
C # 7.1 atau lebih besar menggunakan
Tuples
danInferred tuple element names
(saat ini hanya bekerja denganlinq to objects
dan itu tidak didukung ketika pohon ekspresi diperlukan misalnyasomeIQueryable.GroupBy(...)
. Masalah Github ):C # 3 atau lebih besar menggunakan
anonymous types
:sumber
Anda juga dapat menggunakan Tuple <> untuk pengelompokan yang sangat diketik.
sumber
Meskipun pertanyaan ini menanyakan tentang properti grup per kelas, jika Anda ingin mengelompokkan beberapa kolom terhadap objek ADO (seperti DataTable), Anda harus menetapkan item "baru" ke variabel:
sumber
sumber
sumber
Linq.Enumerable.Aggregate()
bahkan ini memungkinkan untuk mengelompokkan oleh sejumlah dinamis sifat:propertyValues.Aggregate((current, next) => current + " " + next)
..GroupBy(x => (x.MaterialID, x.ProductID))
sumber
grup x dengan {x.Col, x.Col} baru
sumber
Satu hal yang perlu diperhatikan adalah Anda perlu mengirimkan objek untuk ekspresi Lambda dan tidak dapat menggunakan instance untuk kelas.
Contoh:
Ini akan dikompilasi tetapi akan menghasilkan satu kunci per siklus .
Jika Anda tidak ingin memberi nama properti kunci dan kemudian mengambilnya, Anda bisa melakukannya seperti ini. Ini akan
GroupBy
dengan benar dan memberi Anda properti kunci.sumber
Untuk VB dan anonim / lambda :
sumber