引用属性的LINQ表达式

本文关键字:表达式 LINQ 属性 引用 | 更新日期: 2023-09-27 18:22:28

我想要获得引用属性的LINQ表达式

我需要获取Lambda表达式作为groupCol=>groupCol.Role.Name

我尝试过使用该表达式,但没有成功,这将适用于groupCol=>groupCol.MenuText,但不适用于引用类型

var menu = Expression.Parameter(typeof(Menu), "groupCol");
// getting  Role.Name' is not a member of type exception
var menuProperty = Expression.PropertyOrField(menu, property);
var lambda = Expression.Lambda<Func<Menu, string>>(menuProperty, menu);

public class Menu
{
  public string MenuText {get;set;}
  public Role Role {get;set;}
  public string ActionName {get;set;}
}
public class Role
{
  public string Name {get;set;}
}

提前感谢

引用属性的LINQ表达式

您需要一次只做一个属性:

private static Expression<Func<Menu, string>> GetGroupKey(string property)
{
    var parameter = Expression.Parameter(typeof(Menu));
    Expression body = null;
    foreach(var propertyName in property.Split('.'))
    {
        Expression instance = body;
        if(body == null)
            instance = parameter;
        body = Expression.Property(instance, propertyName);
    }
    return Expression.Lambda<Func<Menu, string>>(body, parameter);
}

这个答案扩展了我在回答你之前的问题时向你展示的GetGroupKey方法。