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
оператор для.
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));