【问题标题】:LINQ Expression of the Reference Property引用属性的 LINQ 表达式
【发布时间】:2013-07-16 14:50:05
【问题描述】:

我想获取引用属性的 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;}
}

提前致谢

【问题讨论】:

    标签: c# linq group-by


    【解决方案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 方法。

    【讨论】:

    • 是否可以进行Multi Group By#
    • list.GroupBy(e => new { e.MenuText, e.Role.Name});
    • @ineffablep:这更复杂。请将它作为一个新问题发布并作为上下文链接到这个问题。您需要指定要传递的字符串的确切语法。提示:传递字符串"new { e.MenuText, e.Role.Name}" 是个坏主意。
    • 我的意思是,我需要以下格式的它>
    猜你喜欢
    • 2017-07-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多