我目前正在使用以下代码来显示重复的条目。
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/