2017-07-31 18 views
1

我有一个包含像迭代通过数据视图性能下降

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 
     } 
} 

回答

1

您可以通过ID使用LINQ组你行,这只能通过数据表循环一次,而不是每进行一次关键的是你的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 
    } 
} 
+0

谢谢!现在跑得快得多。 – User11040