Массовое удаление в LINQ to Entities - PullRequest
79 голосов
/ 15 мая 2009

Есть ли способ массового удаления группы объектов, соответствующих заданному запросу, в LINQ или LINQ-to-Entities? Единственные ссылки, которые я могу найти, устарели, и кажется глупым перебирать и вручную удалять все объекты, которые я хочу удалить.

Ответы [ 13 ]

1 голос
/ 19 сентября 2014

Я бы сделал что-то вроде:

var recordsToDelete = (from c in db.Candidates_T where c.MyField == null select c).ToList<Candidates_T>();
if(recordsToDelete.Count > 0)
{
    foreach(var record in recordsToDelete)
    {
        db.Candidate_T.DeleteObject(record);
        db.SaveChanges();
    }
}   

Я не думаю, что есть способ сделать это без цикла, поскольку Entity Framework работает с сущностями, и в большинстве случаев это означает сбор объектов.

1 голос
/ 12 ноября 2012

Удаление данных через Entity Framework зависит от использования метода DeleteObject. Вы можете вызвать этот метод для EntityCollection для класса сущности, который вы хотите удалить, или для производного ObjectContext. Вот простой пример:

NorthwindEntities db = new NorthwindEntities();

IEnumerable<Order_Detail> ods = from o in db.Order_Details
                                where o.OrderID == 12345                                    
                                select o;

foreach (Order_Detail od in ods) 
    db.Order_Details.DeleteObject(od);

db.SaveChanges();
1 голос
/ 15 мая 2009

Вы можете написать сохраненный процесс, который выполняет удаление, и вызвать его из LINQ. Удаление на основе наборов, вероятно, в целом быстрее, но если оно затрагивает слишком много записей, у вас могут возникнуть проблемы с блокировкой, и вам может понадобиться гибрид циклического перебора наборов записей (возможно, 2000 за раз, размер зависит от структуры вашей базы данных, но 2000 - это исходное место, если вы обнаружите, что основанная на множестве дельта занимает так много времени, что это влияет на другое использование таблицы) для удаления.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...