参照列表项构造C#Lambda表达式
我需要构造一个动态lambda表达式,如:参照列表项构造C#Lambda表达式,c#,lambda,C#,Lambda,我需要构造一个动态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; } [Displ
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 });
}
}
公共类GridItem
{
[必需]
[显示(Name=“Name”)]
公共字符串名称{get;set;}
[必需]
[显示(Name=“Address”)]
公共字符串密码{get;set;}
[显示(Name=“Age”)]
公共字符串年龄{get;set;}
}
公共类GridModelList
{
公共列表数据{get;set;}
公共网格模型列表()
{
数据=新列表();
添加(新的GridItem(){Name=“Name”,Address=“Address”,Age=1});
添加(新的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);
ParameterExpression fieldName=Expression.Parameter(typeof(TGridModel),“m”);
MemberExpression fieldExpr=Expression.Property(字段名,“m.Data.getItem(0.Name”);
Expression exp=Expression.Lambda(fieldExpr,fieldName);
但是,我的问题是我不知道如何正确使用“.getItem(0)”,因为它会给我一个异常:
未为类型“GridModelList”定义实例属性“Data.get\u项(0).Name”
如果您对如何构建所需表达式m=>m.Data[0].Name有任何帮助,我们将不胜感激 你需要这样使用
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);
Expression=Expression.Lambda(fieldNameExpr,fieldName);
您不只是使用普通lambda的任何原因,例如Func lambda=m=>m.Data[0].Name代码>?嗨@Iridium,我需要处理不同的“GridModels”,所以我需要使用反射动态构造这些表达式。最终目标是我可以使用MVC HtmlHelper方法,比如TextboxForThanks@Grundy。我不熟悉lambda表达式,实际上我花了几个小时试图把它弄对。再次感谢!