Как заменить выражение <Func> в предложение where выражения linq to sql

#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 (условие)?