Dynamic предикаты для запросов Linq-to-Entity

Следующий запрос Linq-to-Entities работает нормально:

var query = repository.Where(r => r.YearProp1.HasValue &&
                                  r.YearProp1 >= minYear &&
                                  r.YearProp1 <= maxYear);

В моей базе данных около дюжины столбцов, в которых содержится информация, относящаяся к годам (тип данных short?). Я хочу повторно использовать тот же Linq. Логика -to-Entities для всех этих столбцов.Что-то вроде:

Func<RepoEntity, short?> fx = GetYearPropertyFunction();
var query = repository.Where(r => fx(r).HasValue &&
                                  fx(r) >= minYear &&
                                  fx(r) <= maxYear);

Это приводит к ошибке:

LINQ to Entities не распознает метод 'System.Nullable`1[System.Int16] fx(RepoEntity)', и этот метод не может быть преобразован в выражение хранилища.

Я понимаю, почему я получаю сообщение об ошибке, но мне интересно, есть ли обходной путь, который не включает дублирование кода десятки раз только для изменения свойства, с которым работает SQL-запрос.

Я бы повторно использовал эту функцию более чем в одном запросе, поэтому я предполагаю, что общая версия моего вопроса такова: Есть ли способ преобразовать простую лямбда-функцию получения свойства в выражение, которое может использоваться Связь с сущностями?

11
задан Dave Mateer 18 June 2012 в 17:28
поделиться