2017-08-04 59 views
1

我正在使用下面的代碼來顯示重複的條目。在DataTable中標記重複的行

private static void CheckDataTable(DataTable dt) 
    { 
     for (int i = 0; i <= dt.Rows.Count; i++) 
     { 
      for (int a = i + 1; a < dt.Rows.Count; a++) 
      { 
       if (dt.Rows[i]["ID"].ToString() == dt.Rows[a]["ID"].ToString()) 
        dt.Rows[i]["Duplicate"] = true; 
      } 
     } 
    } 

Duplicate列後來被集成到一個WPF數據網格着色的細胞。該方法工作得很好,但只要DataTable有很多行(例如180),整個過程就會花費很長時間,因爲我會再次在DataGrid中更改每個單元格的方法。

有沒有更快或更好的方法?

+1

您標記每個記錄爲「真」爲你遇到的每一個副本。你確定你需要這麼做嗎?或者你可以得到唯一的行,按照它們出現的次數進行分組。 –

回答

3

您可以這樣做:按ID對行進行分組,並計算id大於0的位置。使用Linq可以輕鬆實現。

,或者跳過本地變量:

dt.AsEnumerable() 
    .GroupBy(r = > r[0]) 
    .Where(r = > r.Count() > 1) 
    .SelectMany(r = > r) 
    .ToList() 
    .ForEach(r = > r["Duplicate"] = true); 
+0

'SelectMany(r => r.ToList())'不簡單'SelectMany(r => r)' – dovid

+0

@lomed,你說得對,謝謝。我編輯了我的答案。 – Nino

+0

謝謝你的迴應。它效果很好。但是,如果我編輯了一個單元格,現在需要使用false值,我該怎麼辦?我很抱歉,但我不太瞭解LinQ – Hadda