手動で式ツリーを作成すると、ランタイムが戻り値の型を自動的に決定するようです。したがって、次のような式ツリーを作成すると:
// Order contains a navigation property for Customer
(Order o) => o.Customer;
ランタイムは、戻り値の型を Customer として決定します。基本的には次のとおりです。
Expression<Func<Order, Customer>> efd = (Order o) => o.Customer;
どうすればビルドできますか、またはビルドしたものを変更できます。したがって、戻り値はオブジェクトです。つまり、式は次のようになります。
Expression<Func<Order, object>> ef = (Order o) => o.Customer;
これは一般的なものであり、コンパイル時に戻り値の型が Customer になるかどうかはわかりません。(この場合) 順序からの任意のナビゲーション プロパティである可能性があります。
明確化
次のような式から始めるとしましょう。
Expression<Func<OrderDTO, object>> ef = (OrderDTO o) => o.Customer;
OrderDTO
これを再構築し、ツリーをたどってtoOrder
のタイプを変更し、 from / to タイプのマップに基づいてタイプを変更するルーチンがあります。やっていることはそれだけですが、結果の式は
Expression<Func<Order, Customer>> ef = (Order o) => o.Customer;
したがって、ツリーを再構築するときは、何らかの方法で戻り値の型を指定する必要があります。指定しなかったため、システムが戻り値の型を自動的に決定しているように見えます。ありがとう、レイ