我需要从我的模型中创建Expression<Func<TModel, TValue>>
。
如何访问模型中的属性:
ViewModel.CustomFieldCollection[1].PrimaryFields[3].Value
其中1&amp; 3是将在运行时更新的索引。
我正在尝试创建一个表达式,传递给HtmlHelper,为我生成一个HtmlString。
var viewModelExpParam = Expression.Parameter(typeof(ViewModel));
var fieldParam = Expression.Property(viewModelExpParam, "CustomFieldCollection[1]");
var expression = Expression.Lambda<Func<TModel, TValue>>(fieldParam, viewModelExpParam);
但上面的代码在创建fieldParam
时会出错,因为它不是对象而是集合对象。
我可以在运行时生成一个表达式来访问HtmlHelper中的ViewModel.CustomFieldCollection[1].PrimaryFields[3].Value
吗?
答案 0 :(得分: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);