我目前正在使用以下代码向我显示重复的条目。
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中的每个单元格进行更改。
是否有更快或更好的方式?
答案 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);