2010-12-21 117 views
4

我有一个包含一堆重复项的表。这些是完全重复的,减去主键列,这是一个整数标识列。使用LINQ查找/删除重复项

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

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

谢谢!

+1

是否有一个原因,你不要只使用T-SQL删除重复项? – 2010-12-21 19:14:03

+0

@ Mike M - 我试图用LINQ来做更多的事情,我不确定如何用T-SQL做到这一点:-) – DenaliHardtail 2010-12-21 19:16:14

回答

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

大厦@Craig斯顿茨的回答有 “一个班轮” 另类:

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