C# 标记DataTable中的重复行

C# 标记DataTable中的重复行,c#,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"].To

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

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;
            }
        }
    }
private static void CheckDataTable(DataTable dt)
{

对于(inti=0;i您可以这样做:按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);

对于遇到的每一个重复项,您都将每条记录标记为“true”。您确定需要这样做,还是只需获得唯一的行,并根据它们的出现次数进行分组。
SelectMany(r=>r.ToList())
notsimpler
SelectMany(r=>r)
@lomed,你说得对,谢谢。我已经编辑了我的答案。谢谢你的回复。效果很好。但是如果我编辑了一个单元格,现在需要值false,我该怎么办呢?很抱歉,我不太清楚LinQ@Hadda,您可以将每行的
Duplicate
列设置为
false
,然后检查是否存在重复s、 所以,第一行可以是
dt.AsEnumerable().ToList().ForEach(r=>r[“Duplicate”]=false);
@Nino工作得很好。非常感谢