Как Вы циклично выполняетесь через IQueryable и удаляете некоторые элементы, в которых я не нуждаюсь.
Я ищу что-то вроде этого
var items = MyDataContext.Items.Where(x => x.Container.ID == myContainerId);
foreach(Item item in items)
{
if(IsNotWhatINeed(item))
items.Remove(item);
}
Действительно ли это возможно?Заранее спасибо
Вы должны иметь возможность запросить это дальше, как в этом
var filtered = items.Where(itm => IsWhatINeed(itm));
Также обратите внимание на небольшое изменение логической функции на утвердительное, а не на отрицательное. Для этого (отрицательного) и предназначен оператор not
.
Другие ответы верны в том, что вы можете уточнить запрос с помощью оператора '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 = MyDataContext.Items.Where(x => x.Container.ID == myContainerId
&& !IsNotWhatINeed(x));
или
var items = MyDataContext.Items.Where(x => x.Container.ID == myContainerId)
.Where(x=> !IsNotWhatINeed(x));
Попробуйте следующее:
var items = YourDataContext.Items.Where(x => x.Container.ID == myContainerId
&& !IsNotWhatYouNeed(x));