DeleteObject () в цикле foreach

С Платформой Объекта я пытаюсь удалить некоторые объекты из своего контекста объекта как этот:

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

С этим кодом у меня есть "Набор, был Изменен" Исключение.

Так, как я могу сделать, пакет удаляет?

18
задан Brian Tompsett - 汤莱恩 8 July 2015 в 21:31
поделиться

2 ответа

Вы должны сначала получить элементы, которые вы хотите удалить, из коллекции, которую вы собираетесь изменить. Вы можете сделать это с помощью простого запроса 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));
28
ответ дан 30 November 2019 в 07:38
поделиться

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

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

context.Items.Where( i => i.Value > 50 ).ToList().ForEach(item => context.Items.Remove(item));
6
ответ дан 30 November 2019 в 07:38
поделиться
Другие вопросы по тегам:

Похожие вопросы: