Wie kann ich GroupBy Multiple Columns in LINQ ausführen?
Ähnliches in SQL:
SELECT * FROM <TableName> GROUP BY <Column1>,<Column2>
Wie kann ich dies in LINQ konvertieren:
QuantityBreakdown
(
MaterialID int,
ProductID int,
Quantity float
)
INSERT INTO @QuantityBreakdown (MaterialID, ProductID, Quantity)
SELECT MaterialID, ProductID, SUM(Quantity)
FROM @Transactions
GROUP BY MaterialID, ProductID
Verfahrensprobe
quelle
Ok habe das als:
quelle
Versuchen Sie dies stattdessen für Gruppieren nach mehreren Spalten ...
Genauso können Sie Column3, Column4 usw. hinzufügen.
quelle
Result
enthält alle Datensätze, die mit allen Spalten verknüpft sind. Vielen Dank!Seit C # 7 können Sie auch Wertetupel verwenden:
oder
quelle
C # 7.1 oder höher mit
Tuples
undInferred tuple element names
(derzeit funktioniert es nur mitlinq to objects
und wird nicht unterstützt, wenn Ausdrucksbäume erforderlich sind, zsomeIQueryable.GroupBy(...)
. B. Github-Problem ):C # 3 oder höher mit
anonymous types
:quelle
Sie können auch ein Tupel <> für eine stark typisierte Gruppierung verwenden.
quelle
Diese Frage bezieht sich zwar auf Eigenschaften nach Gruppierung nach Klasse. Wenn Sie jedoch mehrere Spalten für ein ADO-Objekt (wie eine DataTable) gruppieren möchten, müssen Sie Ihre "neuen" Elemente Variablen zuweisen:
quelle
quelle
quelle
Linq.Enumerable.Aggregate()
damit kann sogar nach einer dynamischen Anzahl von Eigenschaften gruppiert werden :propertyValues.Aggregate((current, next) => current + " " + next)
..GroupBy(x => (x.MaterialID, x.ProductID))
quelle
gruppiere x nach neu {x.Col, x.Col}
quelle
Beachten Sie, dass Sie ein Objekt für Lambda-Ausdrücke senden müssen und keine Instanz für eine Klasse verwenden können.
Beispiel:
Dies wird kompiliert, generiert jedoch einen Schlüssel pro Zyklus .
Wenn Sie die Schlüsseleigenschaften nicht benennen und dann abrufen möchten, können Sie dies stattdessen so tun. Dies wird
GroupBy
korrekt sein und Ihnen die Schlüsseleigenschaften geben.quelle
Für VB und anonym / Lambda :
quelle