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())
notsimplerSelectMany(r=>r)
@lomed,你说得对,谢谢。我已经编辑了我的答案。谢谢你的回复。效果很好。但是如果我编辑了一个单元格,现在需要值false,我该怎么办呢?很抱歉,我不太清楚LinQ@Hadda,您可以将每行的Duplicate
列设置为false
,然后检查是否存在重复s、 所以,第一行可以是dt.AsEnumerable().ToList().ForEach(r=>r[“Duplicate”]=false);
@Nino工作得很好。非常感谢