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

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

Я ищу что-то подобное

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

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

5 ответов


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

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

также обратите внимание на тонкое изменение булевой функции на утвердительную, а не отрицательную. Это (отрицательное) то, что not оператор для.


items = items.Where( x => !IsNotWhatINeed(x) );

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));

другие ответы верны в том, что вы можете дополнительно уточнить запрос с помощью оператора "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.


Попробуйте Это:

var items = YourDataContext.Items.Where(x => x.Container.ID == myContainerId 
    && !IsNotWhatYouNeed(x));