使用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("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("chargetag") into g select new { ChargeTag = g.Key, Count = g.Count(), ChargeSum = g.Sum(x => x.Field("charge")) }; 

(我在这里删除了let条款,因为它并没有真正为你买任何东西。)

现在这可能效率低下; 它可能最终分组两次以执行两次聚合操作。 你可以解决这个问题,就像这样的查询延续,如果你真的想要:

 var groupedData = from b in dataTable.AsEnumerable() group b by b.Field("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("charge")) }; 

或者使用let子句:

 var groupedData = from b in dataTable.AsEnumerable() group b by b.Field("chargetag") into g let list = g.ToList() select new { ChargeTag = g.Key, Count = list.Count, ChargeSum = list.Sum(x => x.Field("charge")) };