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

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

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

我有三个删除标准:

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

因此,如果存在具有相同名称、相同日期和相同状态的记录……删除一个。哪个都不重要。

我有: dbContext.tbl_mytable

最佳答案

既然你在谈论删除记录,你需要先测试

So if there are records with same Name, and same date and same status... remove one. Does not matter which one.

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

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

比如

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();

关于c# - LINQ - 如何删除表中的重复行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33440741/

相关文章:

c# - gRPC 支持 .NET 3.5 框架

.net - WCF:从OperationContext检索MethodInfo

c# - 将延迟的 IEnumerable<T> 拆分为两个序列而不重新评估?

c# - XMLSerializer 到 XElement

c# 使用 Linq2Sql 在表列中查找匹配词

c# - 是否可以在执行 Parallel.ForEach 期间更改 parallelOptions.MaxDegreeOfParallelism?

c# - 短代码正则表达式

c# - 从 MySQL 中检索中型 blob 仅返回 13 个字节

c# - 未构建 csproj 时抑制 AfterBuild 目标

c# - 有人可以向我解释一下这个 LINQ/Entity Framework 查询实际上是如何工作的吗?