反復

2017-07-31 17 views
1

Iは反復

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

Iは各ID(列1)データテーブルとプロセスをループしたいです。

以下のコードは正常に機能しましたが、非常に遅いです。 200,000行を反復するのに15分かかりました。パフォーマンスを向上させる方法はありますか?あなたはあなたのRowFilterソリューションは、おそらく私がしてきた、私のC#を許して(やっていることを各キーに一度ではなく、一回のDataTableている必要がありますだけループ、IDによってグループにあなたの行をLINQを使用することができ

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

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