参考属性的LINQ表达式

时间:2013-07-16 14:50:06

标签: c# linq group-by

我想获得参考属性的LINQ表达式

我需要将Lambda Expression作为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;}
}

先谢谢

1 个答案:

答案 0 :(得分:1)

您需要一次执行此属性:

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);
}

此答案扩展了我在my answer to your previous question中向您展示的GetGroupKey方法。