在DataTable中标记重复行

时间:2017-08-04 08:22:57

标签: c#

我目前正在使用以下代码向我显示重复的条目。

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 DataGrid中以为单元格着色。该方法工作正常,但只要DataTable有很多行,例如180,整个过程就会花费很长时间,因为我再次对DataGrid中的每个单元格进行更改。

是否有更快或更好的方式?

1 个答案:

答案 0 :(得分:3)

您可以这样做:按ID对行进行分组,并计算该ID大于0的位置。使用Linq可以轻松实现。

private static void CheckDataTable(DataTable dt)
{
    var duplicateRows = dt.AsEnumerable()
        .GroupBy(r = > r[0])
        .Where(r = > r.Count() > 1)
        .SelectMany(r = > r)
        .ToList();

    duplicateRows.ForEach(r = > r["Duplicate"] = true);
}

或者,跳过局部变量:

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