Следующий запрос 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-запрос.
Я бы повторно использовал функцию более чем в одном запросе, поэтому я предполагаю, что общая версия моего вопроса такова: Есть ли способ преобразования простой функции лямбда-функции get-getter в выражение, которое может быть использовано Linq к Entities?