2016-12-08 10 views
2

2つの式を結合/結合/連鎖する方法はありますか?2つの式の結合/連鎖

例えば最終結果はこれに等しくなる

Expression<Func<A,object>> first = x => x.B.C; 
Expression<Func<C,object>> second = x => x.D.E; 

:上記の例では

Expression<Func<A,object>> result = x => x.B.C.D.E; 

プロパティアクセサは読みやすくするためのクラス名を使用して書かれています。

Combining two expressions into a pipelineここで説明するアプローチを使用すると、結果は同じですが、式が異なります。

結果がInvokeの代わりにx.B.C.D.Eになるように結合することはできますか?

+3

「式」ではないでしょうか?さもなければ、 'first'が' second'で使用できる 'C'を実際に返していることを知りません。 – juharr

+0

2つの結果を結合する必要がある場合は、msdn:https://code.msdn.microsoft.com/101-LINQ-Samples-3fb9811bを参照してください。 – jdweng

答えて

0

あなたは、このようにそれを行うことができます:

var param = Expression.Parameter(typeof(A)); 
var i1 = Expression.Invoke(first, param); 
var i1Convert = Expression.Convert(i1, typeof(C)); 

var i2 = Expression.Invoke(second, i1Convert); 
var i2Convert = Expression.Convert(i2, typeof(object)); 

var result = Expression.Lambda(i2Convert , param); 

あなたが想定するので、あなたは、Cに変換する必要がありますが、その最初の発現はバックC、ないobjectできます。

関連する問題