c# - 在 DataTable 中标记重复行

标签 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 中的每个单元格更改。

有没有更快甚至更好的方法?

最佳答案

您可以这样做:按 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);

关于c# - 在 DataTable 中标记重复行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45501734/

相关文章:

c# - 处理来自 .NET 的访问冲突

C# 异步并等待不等待代码完成

c# - 任何人都可以在没有 key 的情况下解码 JSON Web Token (JWT) 吗?

c# - DataGridView 选择行并以另一种形式进行编辑

c# - WCF -Stream.Read - 错误?

c# - 需要 RegisterWindowMessage 和 SendMessage 从 c++ 到 c# 的帮助

c# - ASP.NET:GRIDVIEW:如何连续删除整个文本

c# - 将复选框添加到消息框时如何返回正确的枚举

c# - 如何在 C# 中处理多个并发交互的实体

c# - 在 asp.net 中获取应用程序根目录的绝对 uri 的最快方法是什么?