Лямбда-справка группировки и суммирования в C #, нужна функцияили выражениедесятичный >> - PullRequest
0 голосов
/ 26 июля 2010

У меня небольшие проблемы с выполнением встроенных действий .GroupBy () и .Sum ().

У меня есть подмножество данных, полученных с помощью let, поэтому тип возвращаемого значения уже анонимный.Надеюсь, в этом примере достаточно кода, чтобы показать, чего я пытаюсь достичь ...

from r in Repo.R
  join f in Repo.F
    on f.ID equals r.FFK

let totalB = Repo.B
    .Join(
        b => b.FKID,
        f => f.ID
        (b, f) => new { b.ID, b.Qty, b.Fee })
    .Where(
        b => b.someCriteria == someInput)

group r by new 
   { 
      r.Name,
      TotalFee = totalB
                 .GroupBy(tb => tb.TypeId)
                 .Sum(  /*having trouble here*/ )
   }
into rgroup
select new FinalOutput
   {
        rgroup.Key.Name,
        rgroup.Key.TotalFee
   }

Мне нужно действительное значение:

Func<IGrouping<int, anonymous type>, int> selector

или

Expression<Func<IGrouping<int, anonymous type>, decimal>> selector

Ответы [ 2 ]

0 голосов
/ 08 февраля 2011

Вам необходимо передать группировку в селектор сумм следующим образом

.Sum(g => ...)

Здесь "g" - ваша группировка.У него есть ключ, который является значением, по которому он был сгруппирован, и он также содержит все значения, которые вы сгруппировали.Это значения вашего анонимного типа.

Если вы вызовете Sum на «g», это даст вам возможность указать селектор для вашего анонимного типа.

//this is how you can sum values within a grouping
.Sum(g => g.Sum(tb => tb.Fee))

У меня естьугадал "Fee" как имя свойства в моем примере, но как только вы отмените ссылку на переменную "tb", ваш intellisense должен включить и показать вам доступные свойства.*

0 голосов
/ 08 февраля 2011

Посмотрите, можете ли вы написать .Sum(x => x.Key.Fee), но я сомневаюсь, что весь запрос будет работать или вернет ожидаемый результат ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...