我想使用 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,
};
我可以提取收费标签的名称和数量。 我必须如何更改 LINQ 查询才能访问费用总和?
这非常简单 - 只需在组上使用
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"))
};