2013-04-05 13 views
7

少し魔法が必要です。私がやろうとしていることは理にかなっていると信じていますが、計画に問題がないとすれば、どうして歓迎されるのでしょうか。ラムダ式を派生型にキャスト

私が表現

Expression<Func<Entity, bool>>

を持っていると私は/キャスト変換したりしても、まったく新しい表現を作成します:

Expression<Func<Derived, bool>>

これは、EFフィルタクエリとして使用されているが引数としてリポジトリメソッドに渡されます。リポジトリはEntityの列挙型を返すので、共分散を簡単に使うことができますが、返される前に状態が導出された状態でクエリの後処理を行いたいと思います。

EFはこれを内部的に行う必要がありますが、結果の型がEntityではなくDerived型になるようにクエリを実行できるようにしたいと考えています。

ありがとうございます。

+2

? –

+0

これが重複しているかどうかわかりませんが、間違いなく[この質問](http://stackoverflow.com/q/2797261/50079)に似ています。 – Jon

+0

私は太っていた。出血が明白であることを指摘してくれてありがとう。 – MJM

答えて

3

式がExpression<Func<Entity, bool>>の場合は、Cast<Derived>を追加して、その特定の種類のすべてのエンティティに絞り込むことができます。

3

Expressionレベルで作業するには、パラメータとしてDerived型を有する新しい式を構築することができます:

あなたのクエリにキャスト を追加する場合はどう
var entityExpr = (Expression<Func<Entity, bool>>)(e => e.Str == ""); 
var derivedExpr = Expression.Lambda<Func<Derived, bool>>(entityExpr.Body, entityExpr.Parameters); 
関連する問題