我有一个巨大的dataTable(大约500k-600k行).我想根据某些特定列计算行数.例如:我有3列名称ID,类型和值.我想根据'Type'计算'value'列.我使用DataRow Filter完成了它 - 首先获取唯一的'ID',然后为每个'type'计算值.这种逻辑非常复杂,需要更长的时间来处理.我在LINQ中不是很好,所以我想知道我是否可以使用LINQ或其他任何方式更好地做到这一点?
数据表:
ID type value
--------------------------------
2 100 5
2 100 6
2 200 10
3 200 8
3 200 9
4 100 10
4 200 15
Run Code Online (Sandbox Code Playgroud)
我正在寻找的输出是:
ID Type Value
2 100 11
2 200 10
3 200 17
4 100 10
4 200 15
Run Code Online (Sandbox Code Playgroud)
我认为你要找的是这样的.显然,在我使用过的地方<int>,您需要根据需要更换适当的类型.
var output = from row in table.AsEnumerable()
let id = row.Field<int>("ID")
let type = row.Field<int>("type")
group row by new { id, type } into grp
select new
{
ID = grp.Key.id,
Type = grp.Key.type,
Value = grp.Sum(r => r.Field<int>("value"))
};
Run Code Online (Sandbox Code Playgroud)
这将导致相当简单的代码,但它不应该比一个编写良好的循环更有效(当然,如果你可以将它卸载到数据库,你通常会更好).但是,所有事情都是平等的,Linq代码非常优化和高效.如果您对效率有疑问,请进行衡量.运行现有代码(如果有的话)和答案代码,看看你的位置.
| 归档时间: |
|
| 查看次数: |
3455 次 |
| 最近记录: |