我有一个巨大的数据表(大约 500k-600k 行)。我想根据某些特定的列来计算行。 例如:我有 3 列名称 ID、类型和值。我想根据“类型”计算“值”列。我已经使用 DataRow Filter 完成了它 - 首先获取唯一的“ID”,然后为每个“类型”计算值。这个逻辑变得非常复杂,需要更长的时间来处理。我不太擅长 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
我正在寻找的输出是:
ID Type Value
2 100 11
2 200 10
3 200 17
4 100 10
4 200 15
最佳答案
我认为您正在寻找的是这样的东西。显然,我在哪里使用了 <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"))
};
这将产生相当简单的代码,但可以说它不应该比编写良好的循环更高效(当然,如果您可以卸载相反,这对数据库来说,你通常会更好)。然而,在所有条件相同的情况下,Linq 代码经过了很好的优化并且非常高效。如果您对效率有疑问,请衡量。运行您现有的代码(如果有的话)和根据答案编写的代码,看看您的立场。
关于c# - 在 C#.net 中处理大量数据表的有效方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7718190/