Я пытаюсь использовать предикаты в своем коде фильтрации EF.
Это работает:
IQueryable<Customer> filtered = customers.Where(x => x.HasMoney && x.WantsProduct);
Но это:
Predicate<T> hasMoney = x => x.HasMoney;
Predicate<T> wantsProduct = x => x.WantsProduct;
IQueryable<Customer> filtered = customers.Where(x => hasMoney(x) && wantsProduct(x));
не работает во время выполнения:
The LINQ expression node type 'Invoke' is not supported in LINQ to Entities.
Я не могу использовать первый вариант, так как это простой пример, и на самом деле я пытаюсь объединить кучу предикатов вместе (с и, а не, и т.д.), чтобы достичь того, что я хочу.
Как я могу заставить провайдера EF Linq "понять" мой предикат (ы)?
Я получаю тот же результат, если я использую Func<T, bool>
. Он работает с Expression<Func<T>>
, но я не могу комбинировать выражения для сложной фильтрации. Я предпочитаю избегать внешних библиотек, если это возможно.
UPDATE:
Если этого не может быть сделано, какие у меня варианты? Возможно, выражения должны быть объединены/or'ed/и каким-то образом достигнуть того же эффекта?