使用LINQ查找/删除重复项

时间:2010-12-21 19:09:42

标签: linq entity-framework

我有一个包含大量重复项的表。这些是完全重复的,减去主键列,它是一个整数标识列。

使用EF和LINQ,如何找到重复项并删除它们,只留下一份副本。

我找到了重复项和每个使用SQL和SSMS的计数。我只是不知道从哪里开始LINQ。

谢谢!

2 个答案:

答案 0 :(得分:7)

脱离我的头顶(未经测试):

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

答案 1 :(得分:0)

@Craig Stuntz 为基础,使用" one liner"替代方法:

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