DeleteObject () в цикле foreach - PullRequest
18 голосов
/ 08 июля 2010

В Entity Framework я пытаюсь удалить некоторые объекты из контекста моего объекта следующим образом:

foreach (var item in context.Items.Where( i => i.Value > 50 ) )
{
   context.Items.DeleteObject(item);
}

С этим кодом у меня есть исключение "Коллекция была изменена".

Итак, как я могу удалить пакет?

Ответы [ 2 ]

28 голосов
/ 08 июля 2010

Вы должны сначала получить элементы, которые хотите удалить, из коллекции, которую вы собираетесь изменить.Вы можете сделать это с помощью простого запроса LINQ (с помощью ToList () для принудительного выполнения):

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));
6 голосов
/ 08 июля 2010

В foreach при изменении Коллекции вы получаете исключение.

Решение: Скопируйте свою коллекцию.

context.Items.Where( i => i.Value > 50 ).ToList().ForEach(item => context.Items.Remove(item));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...