如何解决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示例),然后在代码中使用它们即可。
解决方法
我有一个记录的类列表,因此用户可以选择按属性名称将行动态分组。例如MenuText
,RoleName
或ActionName
。然后,我必须执行分组,因此我需要一个通用的方法来通过传递列名来处理分组。
范例:
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 举报,一经查实,本站将立刻删除。