#c# #.net #linq #linq-to-sql
#c# #.net #linq #linq-to-sql
Вопрос:
Я хотел бы установить следующий предикат в предложение where инструкции linq, написанной в синтаксисе выражения.
Expression<Func<Purchase, bool>> condition = p => p.Price > 100;
from purchase in dc.GetTable<Purchase>()
where condition
select ...
Однако компилятор не может определить, какой Where использовать: IQuaryable<> или IEnumerable<>.
Как можно решить эту проблему без преобразования выражения linq в цепочки методов?
Ответ №1:
Вы не можете сделать where condition
просто так. Либо вы включаете условие в предложение where (где покупка.Цена>100) или использовать вызов метода Where (условие) внутри выражения запроса, например
from purchase in dc.GetTable<Purchase>().Where(condition)
select ...
Это способ, которым вы можете их объединить.
Ответ №2:
Попробуйте:
where condition.Compile()(purchase);
Комментарии:
1. в OP конкретно говорится
without converting linq expression to method chains
2. Я просто хочу понять синтаксис выражения, а не синтаксис цепочки методов. (из … где .. выберите)
3. Не получил эту часть, «цепочки методов», проверьте мой обновленный ответ.
4. Все это нормально до времени выполнения :), затем он выдает метод NotSupportedException ‘System. Динамический вызов объекта (System. Object[])’ не имеет поддерживаемого перевода в SQL.
5. Как и ожидалось. 😉 Я не уверен, действительно ли вы можете это сделать, используя этот синтаксис. Что не так с . Параметр Where (условие)?