2017-02-07 10 views
0

私のモデルからExpression<Func<TModel, TValue>>を作成する必要があります。汎用オブジェクトのラムダ式の作成

どのようにモデル内のプロパティにアクセスするには:1 & 3は、実行時に更新されますインデックスです

ViewModel.CustomFieldCollection[1].PrimaryFields[3].Value 

私はHtmlStringを生成するために、HtmlHelperに渡す式を作成しようとしています。 fieldParamを作成しながら、それは、オブジェクトが、コレクションの対象ではありませんよう

var viewModelExpParam = Expression.Parameter(typeof(ViewModel)); 

var fieldParam = Expression.Property(viewModelExpParam, "CustomFieldCollection[1]"); 

var expression = Expression.Lambda<Func<TModel, TValue>>(fieldParam, viewModelExpParam); 

しかし、上記のコードは、エラーになります。

実行時にHtmlHelperでViewModel.CustomFieldCollection[1].PrimaryFields[3].Valueにアクセスする式を生成できますか?

答えて

2

あなたはItemプロパティ(それだけのサンプルコードですが、私は:)あなたはそれのために任意のコードを提供していない、それを試していない)を介してindexxedメンバーをアクセスもできます。

var customFieldCollection = Expression.Property(viewModelExpParam,"CustomFieldCollection"); 
var fieldParam = Expression.Property(customFieldCollection , "Item", 
         new Expression[] { Expression.Constant(1) }); 

そしてより:

var primaryFields = Expression.Property(fieldParam,"PrimaryFields"); 
var primaryFieldItem = Expression.Property(primaryFields , "Item", 
          new Expression[] { Expression.Constant(3) }); 
var value = Expression.Property(primaryFieldItem, "Value"); 

var expression = Expression.Lambda<Func<TModel, TValue>>(value, viewModelExpParam); 
+0

okです。私は試してみます! – Lokesh

+0

は問題を抱えています:値はViewModelからViewModel.Valueとして参照され、ViewModel.CustomFieldCollection [1] .PrimaryFields [3] .Valueでは参照されません – Lokesh

+0

したがって、すべてのものを必要とせず、var value = Expression .Property(viewModelExpParam、 "Value")?そして何が問題なの? –

関連する問題