我正在使用 LINQ to Entities 并查询某个日期时间段内的条目,这些条目保存在具有属性DateFrom
和DateTo
. 为此,我可以使用以下内容创建一个序列
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 方法需要 aFunc<T, boolean>
或 a Expression<Func<T, boolean>>
。
是否有可能有一个可重用的表达式,它需要多个参数并且可用于过滤IQueryable
集合(最好使用查询提供程序进行过滤,而不是过滤内存中的对象)。