Я использую LINQ to Entities и запрашиваю записи в течение определенного периода времени, хранящегося в объекте модели, который имеет свойства DateFrom
и DateTo
. Для этого можно использовать следующую команду, чтобы создать последовательностьИспользование IQueryable Где с выражениями с более чем одним параметром
var allActiveLogs = this.repository.RoutePerformanceLogs
.Where(log => log.Date >= model.DateFrom.Value &&
log.Date <= model.DateTo.Value)
Если я хочу абстрагироваться это для повторного использования я могу создать следующее выражение (пока модель находится в области видимости).
Expression<Func<RoutePerformanceLog, bool>> logWithinDateBounds = log =>
log.Date >= model.DateFrom.Value && log.Date <= model.DateTo.Value;
и потом называют
var allActiveLogs = this.repository.RoutePerformanceLogs.Where(logWithinDateBounds)
То, что я хотел бы сделать, это абстрактное это выражение далее, к коду, где модель не в объеме, возможно, используя выражение подписи
Expression<Func<RoutePerformanceLog, DateTime?, DateTime?, bool>> logWithinDateBounds
Однако это не будет работать внутри метода Where, так как метод where требует Func<T, boolean>
или Expression<Func<T, boolean>>
.
Возможно ли использовать многоразовое выражение, которое принимает более одного параметра и может использоваться для фильтрации коллекции IQueryable
(предпочтительно с использованием поставщика запроса для фильтрации, а не для фильтрации объектов в памяти).