我想使用LINQ对DataTable中的数据进行分组(列:userid,chargetag,charge).
内容可能如下所示:
userid chargetag charge
-----------------------------
user1 tag3 100
user2 tag3 100
user3 tag5 250
Run Code Online (Sandbox Code Playgroud)
结果我需要这样的东西:
chargetag count sum
-------------------------
tag3 2 200
tag5 1 250
Run Code Online (Sandbox Code Playgroud)
这是我到目前为止:
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,
};
Run Code Online (Sandbox Code Playgroud)
我可以提取出收据标签的名称和号码.我如何更改LINQ查询以访问费用总和?
提前致谢 :-)
问候,凯文
Jon*_*eet 38
这很简单 - 只需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"))
};
Run Code Online (Sandbox Code Playgroud)
(我已经删除了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"))
};
Run Code Online (Sandbox Code Playgroud)
或者用一个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"))
};
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
68011 次 |
| 最近记录: |