Это довольно просто - просто используйте метод расширения Sum
для группы.
var groupedData = from b in dataTable.AsEnumerable()
group b by b.Field<string>("chargetag") into g
select new
{
ChargeTag = g.Key,
Count = g.Count(),
ChargeSum = g.Sum(x => x.Field<int>("charge"))
};
(здесь я удалил предложение let
, так как оно на самом деле ничего вам не покупало).
Теперь, когда может быть неэффективным;это может закончиться группировкой дважды, чтобы выполнить две операции агрегации.Вы могли бы исправить это, например, с помощью продолжения запроса, как это, если бы вы действительно хотели:
var groupedData = from b in dataTable.AsEnumerable()
group b by b.Field<string>("chargetag") into g
select new
{
ChargeTag = g.Key,
List = g.ToList(),
} into g
select new
{
g.ChargeTag,
Count = g.List.Count,
ChargeSum = g.List.Sum(x => x.Field<int>("charge"))
};
Или с помощью предложения let
:
var groupedData = from b in dataTable.AsEnumerable()
group b by b.Field<string>("chargetag") into g
let list = g.ToList()
select new
{
ChargeTag = g.Key,
Count = list.Count,
ChargeSum = list.Sum(x => x.Field<int>("charge"))
};