LINQ: Как удалить элемент из IQueryable <T>

Как Вы циклично выполняетесь через IQueryable и удаляете некоторые элементы, в которых я не нуждаюсь.

Я ищу что-то вроде этого

var items = MyDataContext.Items.Where(x => x.Container.ID == myContainerId);
foreach(Item item in items)
{
  if(IsNotWhatINeed(item))
    items.Remove(item); 
}

Действительно ли это возможно?Заранее спасибо

11
задан John Saunders 30 May 2010 в 12:06
поделиться

5 ответов

Вы должны иметь возможность запросить это дальше, как в этом

var filtered = items.Where(itm => IsWhatINeed(itm));

Также обратите внимание на небольшое изменение логической функции на утвердительное, а не на отрицательное. Для этого (отрицательного) и предназначен оператор not .

14
ответ дан 3 December 2019 в 03:04
поделиться

Другие ответы верны в том, что вы можете уточнить запрос с помощью оператора 'where'. Однако я предполагаю, что ваш запрос - это запрос Linq2Sql. Поэтому вам нужно убедиться, что у вас есть данные в памяти перед дальнейшей фильтрацией с помощью пользовательской функции:

var items = MyDataContext.Items.Where(x => x.Container.ID == myContainerId)
    .ToList(); // fetch the data in memory

var itemsToRemove = items.Where(IsNotWhatINeed);

Если вы действительно хотите расширить IQueryable, то функция 'IsNotWhatINeed' должна быть переведена во что-то, что понимает Linq2Sql.

2
ответ дан 3 December 2019 в 03:04
поделиться
items = items.Where( x => !IsNotWhatINeed(x) );
9
ответ дан 3 December 2019 в 03:04
поделиться
var items = MyDataContext.Items.Where(x => x.Container.ID == myContainerId 
    && !IsNotWhatINeed(x));

или

var items = MyDataContext.Items.Where(x => x.Container.ID == myContainerId) 
    .Where(x=> !IsNotWhatINeed(x));
3
ответ дан 3 December 2019 в 03:04
поделиться

Попробуйте следующее:

var items = YourDataContext.Items.Where(x => x.Container.ID == myContainerId 
    && !IsNotWhatYouNeed(x));
1
ответ дан 3 December 2019 в 03:04
поделиться
Другие вопросы по тегам:

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