同じ複雑なWhere句を含むLinqからSQLへのクエリのペアがあります。具体的には次のとおりです。
where ((range.MinimumFrequency <= minFreq && minFreq <= range.MaximumFrequency)
|| (range.MinimumFrequency <= maxFreq && maxFreq <= range.MaximumFrequency)
|| (range.MinimumFrequency <= minFreq && maxFreq <= range.MaximumFrequency)
|| (range.MinimumFrequency >= minFreq && maxFreq >= range.MaximumFrequency))
そして、このコードのチャンクをあちこちにコピーして貼り付けるのではなく、共有できる他の何かにリファクタリングしたかったのです。SQLに変換できないため、通常のメソッドではこれを実行できないことはわかっていますが、
式<機能<...>>
ここで説明されていることはどちらでも機能します。
ここで正気を保つためにwhere句を単純化すると、
where (range.MinumumFrequency < minFreq)
式に入れるので、私は試しました:
public static Expression<Func<FreqRange, bool>> Overlaps(decimal minMHz, decimal maxMHz)
{
return (range => range.MinimumFrequency <= minMHz);
}
これはコンパイルされているように見えますが、whereステートメントが機能しないようです。次のことを試しました。
where FreqRange.Overlaps(minMHz, maxMHz)
しかし、これによりコンパイル時エラーが発生します。
タイプ'System.Linq.Expressions.Expression>'を'bool'に暗黙的に変換することはできません
何か案は?また、これが機能すると仮定して、Expression <Func <>>のラムダ式を拡張して他の条件を含めることはできますか?