LINQ to Entities не поддерживает вызов

У меня есть следующий запрос в LINQ to Entities:

var query = from p in db.Products
            where p.Price > 10M
            select p;

На данный момент запрос не выполнен, и я хочу написать запрос, который будет вернуть true/false на основе некоторых условий:

return query.Any(p => p.IsInStock &&
               (p.Category == "Beverage" ||
               p.Category == "Other"));

Это работает нормально; однако я хотел бы получить повторное использование моего кода. У меня есть много методов, которые необходимо фильтровать на основе того, является ли категория Напиток или Другое, поэтому я попытался создать делегат:

Func<Product, bool> eligibleForDiscount = (product) => product.Category == "Beverage" || product.Category == "Other";

Я хотел заменить встроенную проверку делегатом:

return query.Any(p => p.IsInStock && eligibleForDiscount(p));

Это дает мне сообщение об ошибке, что LINQ to Entities не поддерживает Invoke. Почему я не могу заменить встроенный код на такой делегат, и есть ли способ выполнить повторное использование другим способом?

7
задан leppie 16 May 2012 в 16:13
поделиться