Как я могу сделать несколько столбцов GroupBy в LINQ
Нечто похожее на это в SQL:
SELECT * FROM <TableName> GROUP BY <Column1>,<Column2>
Как я могу преобразовать это в 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
Процессуальный образец
источник
Хорошо, получил это как:
источник
Для группировки по нескольким столбцам попробуйте это вместо ...
Таким же образом вы можете добавить Column3, Column4 и т. Д.
источник
Result
содержит все наборы данных, связанные со всеми столбцами. Большое спасибо!Начиная с C # 7 вы также можете использовать кортежи значений:
или
источник
C # 7.1 или выше с использованием
Tuples
иInferred tuple element names
( в настоящее время он работает только сlinq to objects
и она не поддерживается , когда деревья выражений необходимы , напримерsomeIQueryable.GroupBy(...)
. Github вопрос ):C # 3 или выше, используя
anonymous types
:источник
Вы также можете использовать Tuple <> для строго типизированной группировки.
источник
Хотя этот вопрос задает вопрос о свойствах группировки по классам, если вы хотите сгруппировать по нескольким столбцам объект ADO (например, DataTable), вы должны назначить свои «новые» элементы переменным:
источник
источник
источник
Linq.Enumerable.Aggregate()
этим даже позволяет группировать динамическим рядом свойств:propertyValues.Aggregate((current, next) => current + " " + next)
..GroupBy(x => (x.MaterialID, x.ProductID))
источник
группа x по новым {x.Col, x.Col}
источник
Следует отметить, что вам нужно отправить объект для лямбда-выражений, и вы не можете использовать экземпляр для класса.
Пример:
Это скомпилирует, но сгенерирует один ключ за цикл .
Если вы не хотите называть ключевые свойства и затем извлекать их, вы можете сделать это следующим образом. Это
GroupBy
правильно и даст вам ключевые свойства.источник
Для VB и анонимных / лямбда :
источник