實體框架,我試圖從我的對象上下文刪除一些對象,如認爲:DeleteObject的()在foreach循環
foreach (var item in context.Items.Where(i => i.Value > 50))
{
context.Items.DeleteObject(item);
}
有了這個代碼,我有一個「集合被修改」異常。
那麼,我該怎麼做批量刪除?
實體框架,我試圖從我的對象上下文刪除一些對象,如認爲:DeleteObject的()在foreach循環
foreach (var item in context.Items.Where(i => i.Value > 50))
{
context.Items.DeleteObject(item);
}
有了這個代碼,我有一個「集合被修改」異常。
那麼,我該怎麼做批量刪除?
您必須先將要刪除的項目從要修改的集合中取出。您可以(使用ToList()來強制執行)用一個簡單的LINQ查詢做到這一點:
var toDelete = context.Items.Where(i => i.Value > 50).ToList();
foreach(var item in toDelete)
{
context.Items.DeleteObject(item);
}
或者,如果你喜歡簡潔的語法(我不這樣做,在這種情況下),你可以使用:
context.Items
.Where(i => i.Value > 50)
.ToList()
.ForEach(item => context.Items.DeleteObject(item));
在foreach中,當Collection被修改時,你會得到異常。
解決方案: 複製您的收藏。
context.Items.Where(i => i.Value > 50).ToList().ForEach(item => context.Items.Remove(item));
非常聰明。我只是寫了一個類似的答案,但你是第一個。 – Jeroen 2010-07-08 14:26:42
也許會有趣的提到爲什麼.ToList()添加在行的末尾: var toDelete = context.Items.Where(i => i.Value> 50).ToList(); ...它是什麼引起的:-) – Mariusz 2011-07-25 19:14:30