我有一个包含
等行的数据表123,1,ABC,2,21.50,36.33
123,1,ABC,2,22.67,0.00
456,1,ABC,2,101.02,53.92
456,1,ABC,2,0.00,0.00 ...
我想遍历数据表并处理每个ID(第1列)。
下面的代码运行正常,但速度非常慢。 花了15分钟迭代200,000行。有没有办法提高性能?
if (dt.Rows.Count > 0)
{
DataView distinctDv = new DataView(dt);
DataTable distinctDt = distinctDv.ToTable(true, "ID");
foreach (DataRow distinctRow in distinctDt.Rows)
{
DataView dv = DataView(dt);
dv.RowFilter = "ID = " + distinctRow["ID"];
foreach (DataRowView drv in dv)
{
//Logic
}
}
答案 0 :(得分:1)
您可以使用LINQ按ID对行进行分组,ID应该只循环一次DataTable,而不是RowFilter解决方案可能执行的每个键的一次(原谅我的C#,我已经在VB中) .NET搁置太久了!):
var grouped = (
from row in dt.AsEnumerable()
group row by row.Field<int>("ID") into g
select g
);
foreach (var grp in grouped)
{
Console.WriteLine("ID = {0}", grp.Key);
foreach (var row in grp)
{
// Logic - row will be the DataRow
}
}