0

私は現在、ラムダ式を使用して動的選択句を作成する作業を行っており、ネストされたコレクションを処理する必要がある時点で立ち往生しています。例えば

class A
{
    public string Property1 {get;set;}
    public string Property2 {get;set;}
    public IEnumerable<B> Property3 {get;set;}
}

class B
{
    public string Prop1 {get;set;}
    public int Prop2 {get;set;}
}

上記のようにクラス A と B があり、A のコレクションを取得しますが、A 内のこのデータはグリッドにバインドされるため、すべてのプロパティは必要ありません。そのようなビュー依存。ビューは、表示するフィールドを定義します。したがって、私はその場でオブジェクトを作成し、それに必要なプロパティを追加しています。これは、以下に示すようにラムダ式を使用して行いました。

Expression.Bind(p, Expression.PropertyOrField(entityExpression, p.Name))

これは、クラス A から Property1 と Property2 のみを選択する必要がある場合に機能しますが、コレクションである Property3 が必要な場合は、オンザフライでタイプを作成し、必要なプロパティを追加するだけなので機能しません。したがって、実行時に次のようなシナリオがあります

IEnumerable<RuntimeType2> => RuntimeType2 { string Prop1 {get;set; }
IEnumberable<RuntimeType1> => 
RuntimeType1 { string Property1 {get;set;
IEnumerable<RuntimeType2> Property3 {get;set;} }

上記は私が達成したいシナリオです。単純なケースでは、これを行うことができますが、コレクションへのバインドに苦労しています。

私の問題に十分な説明があることを願っています。さらに情報が必要な場合は、返信してください。どんなポインタも役に立ちます。

4

1 に答える 1

2

IEnumerable<B>問題は、 type の値を typeのプロパティにプッシュしようとすることですIEnumerable<RuntimeType2>。ネストされた選択を使用して、2 つの間で変換する必要があります (Enumerable.Selectメソッドを呼び出すには、Expression API を使用して作成する必要があります)。

于 2013-02-21T12:20:03.290 に答える