所以我厭倦了一遍又一遍重寫相同的查詢。用IsInDateTimeRange擴展IQueryable
repo.Query().Where(stuff => stuff.Timestamp >= minTime && stuff.Timestamp <= maxTime && ...);
我想我應該有一個名爲IsInDateTimeRange
方法但是延長IQueryable
,並使用它像這樣
repo.Query().IsInDateTimeRange(stuff => stuff.Timestamp, minTime, maxTime) ...
這將是IEnumerable
非常方便,只需一個Func<T, DateTime>
和兩個DateTime
S,爲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'訪問器手動替換相關部分。 – haim770
是的,編譯器錯誤。由於它不是委託,因此無法調用getMember。 – jool