2017-08-04 31 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