2017-08-02 4 views
0

私は定数を返す式を作成しました3単純な式コンビネーション

var right = Expression.Constant(3); 

そして私は別の式を持っていますこの

Expression<Func<BSType, int>> left = bsType => bsType.Length; 

のように見えるFunc<BSType, int>のS私はそう

Expression.Equal(left, right); 

などの等しい発現してそれらを比較しようとすると、私はエラーを取得する:

The binary operator Equal is not defined for the types 'System.Func`2[ExpressionBuilder.BSType,System.Int32]' and 'System.Int32'

私が必要とするように私は感じますそれは長さを解決することができるように関数の左側に型のパラメータを渡すが、私はそうする方法を正確にはわからない、誰かが正しい方向に私を指すことができますか?

+0

私は ' –

+0

が起こっている大体何を示すために、私の質問を更新しました式<機能> ' - あなたは' left'は 'int'はなく、<のFunc >' '式になるように、そのint型の一部を抽出する必要はありませんか? –

+0

@トッツザムええ、どうすればいいですか?エンティティフレームワークで動作する式を生成する方法で –

答えて

0

あなたが代わりにそのように表現本体と組み合わせるのパラメータとしてFUNCに取り式のものを組み合わせるしようとしている:

Expression.Equal(left.Body, right) 
+1

' left'はOPのコードではなく、 'のFunc <...>' 'で表現<機能>'です。さらに、コードでは実際には式を結合するのではなく、式を使用せずに1つのハードコードされた式を作成して組み合わせるだけです。 – Servy

+0

私は 'left'が' Func <> 'であるとは言わず、それは式であり、すべての式は戻り値の型です。元の質問では、 'left'の戻り値の型は' Func <> 'です。私のコードの問題は何ですか?それは要求された表現を構成し、それは動作します。 – Zergatul

+0

式は何も返さない。そして表現は、いくつかのコードの表現です。あなたはそれが表現であるというコードが 'int'を返すと言うことができます。確かに 'Func'は返されません。あなたのコードは、質問が解決するように求める問題を解決するのではなく、与えられた一例のハードコードされた結果を構築するだけです。誰かが2と5のように2つの数字を一緒に加える方法を尋ねると、 "あなたの例で正しい結果を返します"という返信7のメソッドを書いたようなものです。それは本当ですが、実際の問題を解決するものではありません。 – Servy

関連する問題