LINQ - 如何删除表中的重复行

时间:2015-10-30 16:33:03

标签: c# .net linq linq-to-sql

在某些进程之后,我想从表中删除重复项并提交更改,因此只保留单个值。

我有三个删除标准:

  • 名称
  • 日期
  • 状态(始终为1)

因此,如果有相同名称,相同日期和相同状态的记录,请删除一个。无论哪一个。

我有: dbContext.tbl_mytable

1 个答案:

答案 0 :(得分:3)

由于您正在谈论删除记录,因此您需要首先测试

  

因此,如果有相同名称,相同日期和相同状态的记录,请删除一个。无论哪一个。

我假设您要删除除一个以外的所有内容,即,如果您有三个具有相同详细信息的记录,则删除两个并留下一个。

如果是这样,您应该能够通过{名称,日期,状态}进行分组,然后选择除每组中第一条记录以外的所有内容来识别重复项。

之类的东西
var duplicates = (from r in dbContext.tbl_mytable 
                  group r by new { r.Name, r.date, r.status} into results
                  select results.Skip(1)
                 ).SelectMany(a=>a);

 dbContext.tbl_mytable.DeleteAllOnSubmit(duplicates);
 dbContext.SubmitChanges();