我想获得参考属性的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;}
}
先谢谢
答案 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
方法。