Динамическое создание выражения, вызывающего метод EntityFunctions.DiffDays - PullRequest
2 голосов
/ 19 октября 2010

Я пытаюсь динамически создать следующее выражение условия Where:

context.Cars.
Where(c => EntityFunctions.DiffDays(c.Created, c.Created) == null).
ToList()

Это код, который я использую для создания выражения:

var parameter = Expression.Parameter(typeof(Car), "c");
var property = Expression.Property(parameter, "Created");
var function = Expression.Call(typeof(EntityFunctions), "DiffDays", 
    null, property, property);
var comparison = Expression.Equal(function, Expression.Constant(null));
var result = Expression.Lamda<Func<Car, bool>>(comparison, parameter);

Результат показывает (кажется, отсутствует "EntityFunctions.DiffDays"):

{c => (DiffDays(c.Created, c.Created) == null)}

Когда я пытаюсь выполнить с:

context.Cars.Where(result.Compile()).ToList()

Я получаю сообщение об ошибке:

эта функция может быть вызвана только из linq для юридических лиц

Вы знаете, чего мне не хватает? Это потому, что он показывает только «DateDiff», а не «EntityFunctions.DateDiff»

Спасибо. Адам

1 Ответ

2 голосов
/ 19 октября 2010

Удалите вызов «Compile ()» из последней строки, например:

context.Cars.Where(result).ToList();

и отложите компиляцию до LinqToEntities.

...