Использование LINQ для поиска / удаления дубликатов - PullRequest
4 голосов
/ 21 декабря 2010

У меня есть таблица, которая содержит кучу дубликатов. Это точные дубликаты, за исключением столбца первичного ключа, который является целочисленным столбцом идентификаторов.

Используя EF и LINQ, как найти дубликаты и удалить их, оставив только одну копию.

Я нашел дубликаты и подсчет каждого из них с использованием SQL и SSMS. Я просто не знаю, с чего начать с LINQ.

Спасибо!

Ответы [ 2 ]

7 голосов
/ 21 декабря 2010

С макушки головы (не проверено):

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 голосов
/ 17 февраля 2018

Опираясь на ответ @ 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();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...