我有一个包含许多重复项的表格。这些都是完全相同的副本,除了主键列,它是一个整数标识列。
使用EF和LINQ,我该如何查找并删除这些重复项,只留下一份副本。
我在SQL和SSMS中找到了这些重复项以及每个重复项的计数。我只是不知道从哪里开始使用LINQ。
谢谢!
我有一个包含许多重复项的表格。这些都是完全相同的副本,除了主键列,它是一个整数标识列。
使用EF和LINQ,我该如何查找并删除这些重复项,只留下一份副本。
我在SQL和SSMS中找到了这些重复项以及每个重复项的计数。我只是不知道从哪里开始使用LINQ。
谢谢!
我能够提供一些初步想法(未经测试):
var q = from r in Context.Table
group r by new { FieldA = r.FieldA, FieldB = r.FieldB, // ...
into g
where g.Count() > 1
select g;
foreach (var g in q)
{
var dupes = g.Skip(1).ToList();
foreach (var record in dupes)
{
Context.DeleteObject(record);
}
}
Context.SaveChanges();
在@Craig Stuntz的回答基础上,提供了一个“一行代码”的替代方案:
var duplicates = db.Table.GroupBy(a => new { a.FieldA, a.FieldB, ...})
.Where(a => a.Count() > 1)
.SelectMany(a => a.ToList());
foreach (var d in duplicates)
{
db.DeleteObject(d);
}
db.SaveChanges();