Есть ли способ заставить Linq-to-entity оценить локальное выражение? - PullRequest
4 голосов
/ 22 февраля 2011

Допустим, у вас есть следующее выражение linq:

from o in salesEntities.Orders where o.OrderDate < DateTime.Today.AddDays(-20) select o

Entity Framework не знает, как преобразовать DateTime.Today.AddDays (-20) в выражение Entity SQL, и вы получаете следующую ошибку:

LINQ to Entities не распознает метод метода System.DateTime AddDays (Double), и этот метод нельзя преобразовать в выражение хранилища.

Итаквот мои вопросы: есть ли способ заставить Linq to Entities оценить часть лямбда-выражения и подставить постоянное значение, без необходимости объявлять локальную переменную для ее хранения?

Ответы [ 3 ]

9 голосов
/ 22 февраля 2011

LINQ-to-Entities может работать с локальными значениями, но не с локальными выражениями. Ваш код будет работать с этим незначительным изменением:

var pastDate = DateTime.Today.AddDays(-20);

from o in salesEntities.Orders where o.OrderDate < pastDate select o

5 голосов
/ 22 февраля 2013

Измените выражение, используя EntityFunction для добавления дней, например:

var result =
(
from o in salesEntities.Orders 
where o.OrderDate < System.Data.Objects.EntityFunctions.AddDays(DateTime.Today,-20) 
select o
);
3 голосов
/ 22 февраля 2011

Короткий ответ - нет. Все в выражении linq to entity должно быть либо в локальной переменной, либо может быть преобразовано в выражение sql структурой сущности.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...