Используйте LINQ для группировки данных из DataTable
Я хочу использовать LINQ для группировки данных из DataTable (столбцы: userid, chargetag, charge).
содержание может выглядеть так:
userid chargetag charge
-----------------------------
user1 tag3 100
user2 tag3 100
user3 tag5 250
мне нужно что-то вроде этого в результате:
chargetag count sum
-------------------------
tag3 2 200
tag5 1 250
Это то, что у меня есть до сих пор:
var groupedData = from b in dataTable.AsEnumerable()
group b by b.Field<string>("chargetag") into g
let count = g.Count()
select new
{
ChargeTag = g.Key,
Count = count,
};
Я могу извлечь имя chargetag и номер его. Как мне изменить запрос LINQ для доступа к сумме сборов?
спасибо заранее :-)
С уважением, Кевин!--4-->
1 ответов
это довольно просто - просто используйте 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"))
};