Comment puis-je faire plusieurs colonnes GroupBy dans LINQ
Quelque chose de similaire à cela dans SQL:
SELECT * FROM <TableName> GROUP BY <Column1>,<Column2>
Comment puis-je le convertir en 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
Échantillon procédural
la source
Ok j'ai compris ceci:
la source
Pour Grouper par plusieurs colonnes, essayez ceci à la place ...
De la même manière, vous pouvez ajouter Colonne3, Colonne4, etc.
la source
Result
contient tous les ensembles de données liés à toutes les colonnes. Merci beaucoup!Depuis C # 7, vous pouvez également utiliser des tuples de valeur:
ou
la source
C # 7.1 ou supérieur en utilisant
Tuples
etInferred tuple element names
(actuellement , il fonctionne uniquement aveclinq to objects
et il est pas pris en charge lorsque les arbres d'expression sont nécessaires , par exemplesomeIQueryable.GroupBy(...)
. Question Github ):C # 3 ou supérieur en utilisant
anonymous types
:la source
Vous pouvez également utiliser un Tuple <> pour un regroupement fortement typé.
la source
Bien que cette question concerne les propriétés de regroupement par classe, si vous souhaitez regrouper par plusieurs colonnes un objet ADO (comme un DataTable), vous devez affecter vos "nouveaux" éléments aux variables:
la source
la source
la source
Linq.Enumerable.Aggregate()
ce même permet de grouper par un certain nombre de dynamique de propriétés:propertyValues.Aggregate((current, next) => current + " " + next)
..GroupBy(x => (x.MaterialID, x.ProductID))
la source
groupe x par nouveau {x.Col, x.Col}
la source
Une chose à noter est que vous devez envoyer un objet pour les expressions Lambda et ne pouvez pas utiliser une instance pour une classe.
Exemple:
Cela compilera mais générera une clé par cycle .
Si vous ne voulez pas nommer les propriétés des clés puis les récupérer, vous pouvez le faire comme ceci à la place. Ce sera
GroupBy
correctement et vous donnera les propriétés clés.la source
Pour VB et anonyme / lambda :
la source