微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

LINQ动态分组

如何解决LINQ动态分组

如果您不使用数据库,则可以使用Reflection:

private static object GetPropertyValue(object obj, string propertyName)
{
    return obj.GetType().GetProperty(propertyName).GetValue(obj, null);
}

用作:

var grouped = enumeration.GroupBy(x => GetPropertyValue(x, columnName));

这是一个非常原始的解决方案,更好的方法应该是使用Dynamic LINQ

var grouped = enumeration.GroupBy(columnName, selector);

动态 LINQ可能需要一些解释。它不是技术,库或全新的框架。它只是几个方便的(2000 LOC)帮助程序方法名称,使您可以编写此类查询。只需下载它们的源代码(如果未安装VS示例),然后在代码中使用它们即可。

解决方法

我有一个记录的类列表,因此用户可以选择按属性名称将行动态分组。例如MenuTextRoleNameActionName。然后,我必须执行分组,因此我需要一个通用的方法来通过传递列名来处理分组。

范例:

public class Menu
{
  public string MenuText {get;set;}
  public string RoleName {get;set;}
  public string ActionName {get;set;}
}

public class Menus 
{
 var list = new List<Menu>();
 list.Add( new Menu {MenuText="abc",RoleName ="Admin",ActionName="xyz"};
 list.Add( new Menu {MenuText="abc",ActionName="xyz"};
 list.Add( new Menu {MenuText="abc1",RoleName ="Admin1",ActionName="xyz1"};
 list.Add( new Menu {MenuText="abc1",ActionName="xyz1"};

  /// columnName :- Name of the Menu class ( MenuText  or RoleName  or ActionName)

  public IEnumerable<IGrouping<string,IEnumerable<Menu>>> GroupMenu(string columnName)
  {
          // Here I want to get group the list of menu by the columnName 
  }
}

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。