В C # проблема группируется по значению, а затем суммируется - PullRequest
0 голосов
/ 14 января 2010

Я пытаюсь суммировать стоимость для ряда предметов, сгруппированных по организации человека. Я считаю, что суммирование работает правильно, но я не вижу свою группировку. Объекты, хранящиеся в свертке, просто содержат значение суммирования. Я ожидаю, что у них будет организация в дополнение к сумме затрат для этой организации. Что я пропустил в этом выражении?

var rollup = OrgPersonList.GroupBy(
    person => person.Person.Org).Select(group =>
        group.Sum(price => price.Items.Sum(item =>
            item.Cost)));

1 Ответ

1 голос
/ 14 января 2010

Ну, вы только выбираете сумму - если вам также нужен ключ, вы должны выбрать его. Например:

var rollup = OrgPersonList.GroupBy(x => x.Person.Org)
    .Select(group => new { group.Key,
                           Sum =group.Sum(x => x.Items.Sum(item => item.Cost))});

Обратите внимание, что я использовал x вместо person или price, так как кажется, что один и тот же элемент инкапсулирует оба.

Или как выражение запроса:

var rollup = from x in OrgPersonList
             group x by x.Person.Org into grouped
             select new { grouped.Key,
                          Sum =grouped.Sum(x => x.Items.Sum(item =>item.Cost))});

(Пробелы немного ограничены для форматирования ...)

В качестве альтернативы, группа ... by может рассчитать сумму для каждой записи, поэтому результат должен быть просто суммой записей в группе:

var rollup = from x in OrgPersonList
             group x.Items.Sum(item => item.Cost) by x.Person.Org into grouped
             select new { grouped.Key, Sum = grouped.Sum() }); 
...