Группировать по нескольким столбцам - PullRequest
884 голосов
/ 11 мая 2009

Как я могу сделать несколько столбцов 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

Ответы [ 13 ]

2 голосов
/ 23 октября 2017

группа x по новому {x.Col, x.Col}

2 голосов
/ 19 мая 2017
.GroupBy(x => x.Column1 + " " + x.Column2)
0 голосов
/ 26 апреля 2018

Следует отметить, что вам необходимо отправить объект для лямбда-выражений и не использовать экземпляр для класса.

Пример:

public class Key
{
    public string Prop1 { get; set; }

    public string Prop2 { get; set; }
}

Это скомпилируется, но будет генерировать один ключ за цикл .

var groupedCycles = cycles.GroupBy(x => new Key
{ 
  Prop1 = x.Column1, 
  Prop2 = x.Column2 
})

Если вы не хотите называть ключевые свойства и затем извлекать их, вы можете сделать это следующим образом. Это будет GroupBy правильно и даст вам ключевые свойства.

var groupedCycles = cycles.GroupBy(x => new 
{ 
  Prop1 = x.Column1, 
  Prop2= x.Column2 
})

foreach (var groupedCycle in groupedCycles)
{
    var key = new Key();
    key.Prop1 = groupedCycle.Key.Prop1;
    key.Prop2 = groupedCycle.Key.Prop2;
}
...