Expression<Func<T,bool>>
複数の式を組み合わせることができる次の質問を見つけました。
同様の手法を使用して、どのように .OrderByExpression<Func<Entity, Key>>
を .WhereExpression<Func<Entity, bool>>
型の 1 つの Expression にマージするのか、それとも型から継承するのか疑問に思っていますSystem.Linq.Expressions.Expression
。
私は、T => T == ...
パブリック メソッド.Where
と.OrderBy
. これは、このクラスが作成する式を QueryTranslator に渡して適切な SQL を作成することを意図しています。
このスタイルの QueryTranslator は、QueryProvider から呼び出されると、通常、1 つSystem.Linq.Expressions.Expression
を引数として取り、SQL に変換します。
.Where
2 つのFuncをマージするための上記の質問を理解して理解することができます。次のブログ投稿はこれに特に役立ち、各例をたどりました。
http://blogs.msdn.com/b/meek/archive/2008/05/02/linq-to-entities-combining-predicates.aspx
この CodeProject の記事も役に立ちました。
http://www.codeproject.com/Articles/24255/Exploring-Lambda-Expression-in-C
ただし、.OrderBy Func を .Where Func と組み合わせる場合、2 つのジェネリック引数は異なります。.Where の場合は 、Func<Entity, bool>
.OrderBy の場合はFunc<Entity, Key>
.
これら 2 つの式をマージすることは、表面的には、同じ一般的な引数を持つ 2 つをマージするほど簡単ではありません。
組み込みの Func-Expression-producing-engine (正確な用語は不明) は、.Where Func と .OrderBy Func を組み合わせることができます。この 2 つの表現が合体して 1 つになったとき、その内部で何が起こるのか、私は興味がありSystem.Linq.Expressions.Expression
ます。可能であれば、各式でエンティティが同じタイプであると仮定してExpression<Func<Entity, bool>>
、をどのように組み合わせますか?Expression<Func<Entity,Key>>