3

linq式の文字列" Employee.Orders.OrderID "を変換したかった: " employee.Orders.Select(order => order.OrderID) "。

「Employee.FirstName」などの単純なプロパティでこれを行う方法はすでに知っています。私の質問は、コレクション内の型内のプロパティでこれを行う方法です。

「注文」は、「従業員」クラスの注文のコレクションです。「OrderID」はクラス「Order」のプロパティです。

言い換えれば、私はこれを変換したいと思います。

string path = "Employee.Orders.OrderID";

これに;

Expression<Func<Employee, object>> exp = employee => employee.Orders.Select(order => order.OrderID);
4

1 に答える 1

3

これでうまくいくはずです:

https://gist.github.com/4149424

結果の式をコンパイルしていませんが、例外なく式を作成します。

編集:ラムダを作成してコンパイルする行を追加しましたが、これは機能するので、動作します。

コレクションのプロパティにアクセスするシナリオを処理します。Orders.OrderIDこれは、コレクションを複雑にする部分です。これがないと、約30行短くなります。

現在、それが行うことは、'。'で文字列を分割することです。次に、すべての要素を再帰的に処理します。要素がIEnumerable(文字列ではなく)である場合、追加のSelectラムダを構築します。

また、コレクションプロパティのコレクションプロパティにアクセスする、もう少し複雑な(ただし同じ)シナリオも処理します。

于 2012-11-26T17:19:23.497 に答える