Подтвердить что ты не робот

С#/Linq sum, где

У меня есть таблица NCR, содержащая данные формата:

ID | Date     | Item   | Type | Qty
1  | 01/01/13 | Apple  | A    | 1 
2  | 01/01/13 | Apple  | B    | 1 
3  | 01/01/13 | Orange | C    | 1 
4  | 01/01/13 | Orange | A    | 2 
6  | 01/01/13 | Orange | C    | 1 

Я хотел бы создать запрос linq, который дает мне краткое описание типов и сумм для заданной даты:

Item   | A | B | C
Apple  | 1 | 1 | 0 
Orange | 2 | 0 | 2 

Пока у меня есть это:

var q = data.GroupBy(l => l.Item)
             .Select(g => new {
                                    Item = g.Key,
                                    Total = g.Sum(c => c.Qty),
                                    A = g.Sum(c => c.Type == "A"),
                                    B = g.Sum(c => c.Type == "B"),
                                    C = g.Sum(c => c.Type == "C")
});

Однако я не могу представить критерии для выражения g.Sum lambda. Если я использую Count (это неверные данные), я могу дать критерий, но почему Sum не хватает этого? Какова моя альтернатива созданию сводной таблицы доступных данных?

4b9b3361

Ответ 1

Делегат, предоставленный Sum, не является предикатом; это селектор.

Вы пытаетесь суммировать свойство Qty? Если это так, я подозреваю, что вы хотите:

A = g.Where(c => c.Type == "A").Sum(c => c.Qty),
B = g.Where(c => c.Type == "B").Sum(c => c.Qty),
C = g.Where(c => c.Type == "C").Sum(c => c.Qty)

(Конечно, вы тоже можете группировать по типу.)