【发布时间】:2018-02-14 19:30:26
【问题描述】:
所以我有点厌倦了一遍又一遍地重写相同的查询。
repo.Query().Where(stuff => stuff.Timestamp >= minTime && stuff.Timestamp <= maxTime && ...);
我想我应该用一个名为IsInDateTimeRange 的方法扩展IQueryable,并像这样使用它
repo.Query().IsInDateTimeRange(stuff => stuff.Timestamp, minTime, maxTime) ...
这对于IEnumerable 来说非常容易,只需一个Func<T, DateTime> 和两个DateTimes,但是对于IQueryable,我需要一个Expression,我不确定如何使用它。
这是我的尝试,但似乎没有奏效。
public static IQueryable<TValue> IsInDateTimeRange<TValue>(
this IQueryable<TValue> self,
Expression<Func<TValue, DateTime>> getMember,
DateTime minTime,
DateTime maxTime)
{
return self.Where(value => minTime >= getMember(value) && maxTime <= getMember(value));
}
【问题讨论】:
-
当你说不工作时,请解释它是什么意思。例外?编译错误?..
-
由于
getMember(value)噪音,大多数 Linq 提供程序无法将转换后的表达式转换为商店查询。您必须使用常规的Expression.Property访问器手动替换相关部分。 -
是的,编译器错误。无法调用 getMember,因为它不是委托。
标签: c# linq extension-methods iqueryable linq-expressions