Linq to SQL Chunked Операция удаления или обновления? - PullRequest
1 голос
/ 05 августа 2010

У меня есть много строк для удаления в таблице, и с помощью ADO.NET я мог бы отправить SqlCommand с таким текстом:

 WHILE(1=1)  
BEGIN  
DELETE TOP(5000) FROM myTable WHERE myval=123  
 IF @@ROWCOUNT < 5000 BREAK  
END  

Я бы обернул это в транзакции или 2 и мог бы тогдаудаляем порциями, чтобы БД могла выходить в эфир.

Я хотел бы сделать то же самое, но в C # с использованием LINQ-to-SQL, возможно ли это?

Спасибо.

1 Ответ

1 голос
/ 05 августа 2010

К сожалению, в Linq-to-SQL нет операций массового обновления или массового удаления (и с разработка приостановлена ​​на L2S, вряд ли когда-либо будет)

Лучшее, что вы можете сделать, это

db.myTable.DeleteOnSubmit(db.MyTable.Where(m=>m.myval ==123).Take(5000));

Но я почти уверен, что это сгенерирует SELECT, за которым последуют 5000 операторов DELETE.

...