だから、同じクエリを何度も何度も書き直すことに多少疲れています。IsInDateTimeRangeでIQueryableを拡張する
repo.Query().Where(stuff => stuff.Timestamp >= minTime && stuff.Timestamp <= maxTime && ...);
私はこれがしかしのために、ちょうどFunc<T, DateTime>
と2 DateTime
秒、IEnumerable
のために非常に簡単だろうIsInDateTimeRange
と呼ばれる方法でIQueryable
を拡張し、この
repo.Query().IsInDateTimeRange(stuff => stuff.Timestamp, minTime, maxTime) ...
のようにそれを使用する必要がありますと思いました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));
}
、それが何を意味するのか説明してください。例外?コンパイルエラー? –
ほとんどのLinqプロバイダは、その 'getMember(value)'ノイズのために変換された式をストアクエリに変換することができません。関連する部分を通常の 'Expression.Property'アクセサで手動で置き換えなければなりません。 – haim770
はい、コンパイルエラーです。デリゲートではないのでgetMemberを呼び出すことはできません。 – jool