使用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")) };