参照列表项构造C#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

我需要构造一个动态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 });
    }
}
公共类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表达式,实际上我花了几个小时试图把它弄对。再次感谢!