我需要构造一个动态 lambda 表达式,例如:m => m.Data[0].Name
我有模型类:
public class GridItem
{
[Required]
[Display(Name = "Name")]
public string Name{ get; set; }
[Required]
[Display(Name = "Address")]
public string Password { get; set; }
[Display(Name = "Age")]
public string Age{ get; set; }
}
public class GridModelList
{
public List<GridItem> Data { get; set; }
public GridModelList()
{
Data = new List<GridItem>();
Data.Add(new GridItem() {Name = "Name", Address= "Address", Age= 1 });
Data.Add(new GridItem() {Name = "Name", Address= "Address", Age= 1 });
}
}
我正在尝试像这样构造它:
ParameterExpression fieldName = Expression.Parameter(typeof(TGridModel), "m");
MemberExpression fieldExpr = Expression.Property(fieldName, "m.Data.getItem(0).Name");
Expression<Func<TGridModel, object>> exp = Expression.Lambda<Func<TGridModel, object>>(fieldExpr, fieldName);
但是,我的问题是我不知道如何正确使用“.getItem(0)”,因为它给了我异常:
Instance property 'Data.get_Item(0).Name' is not defined for type 'GridModelList'
任何关于如何构建所需表达式m => m.Data[0].Name
的帮助将不胜感激!!
最佳答案
您需要使用Expression.Property for index property像这样
ParameterExpression fieldName = Expression.Parameter(typeof(TGridModel), "m");
var fieldDataExpr = Expression.Property(fieldName, "Data");
var fieldExpr = Expression.Property(fieldDataExpr, "Item", Expression.Constant(0));
var fieldNameExpr = Expression.Property(fieldExpr, "Name");
然后
Expression<Func<TGridModel, object>> exp = Expression.Lambda<Func<TGridModel, object>>(fieldNameExpr, fieldName);
关于c# - 引用列表项构造 C# Lambda 表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22937489/