按运行时已知的多个键进行分组

Jus*_*tin 5 .net c# linq

我有一个telerik网格,我将一个对象列表数据绑定到一个页面上.用户可以在查看数据时根据自己的喜好对列进行分组.我正在编写一个函数来将此数据导出到Excel文档中,并希望保留用户在页面上的分组.我能够获取用户分组的对象属性的字符串名称.

我坚持的是如何在运行时进行分组.有很多这样的例子:使用lambda分组多列,描述如何在编译时提前知道如何按多个属性进行分组.但是,我不知道在运行期间要分组的内容.

有关如何在运行时进行分组的建议吗?

aqu*_*nas 0

我会使用动态 Linq 来做到这一点(http://weblogs.asp.net/scottgu/dynamic-linq-part-1-using-the-linq-dynamic-query-library

例子:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Linq.Dynamic; //have to install this via nuget or download it

public class Person {
    public string FirstName { get; set; }
    public string LastName { get; set; }
    public DateTime DOB { get; set; }
}


class Program {
    static void Main(string[] args) {
        var peeps = new List<Person>{
            new Person(){ FirstName="Tim", LastName="Smith", DOB = DateTime.Now},
            new Person(){ FirstName="Tim", LastName="Smith", DOB = DateTime.Now.AddDays(1)},
            new Person(){ FirstName="Mike", LastName="Smith", DOB = DateTime.Now.AddDays(2)},
            new Person(){ FirstName="Frank", LastName="Jones", DOB = DateTime.Now.AddDays(3)},
        };

        var eq = peeps.GroupBy("new (LastName, FirstName)", "it").Select("new(it.Key as Key, it as People)"); ;
        foreach (dynamic el in eq) {
            Console.WriteLine(el.Key);
            foreach (var person in el.People as IEnumerable<Person>) {
                Console.WriteLine(person.LastName + " " + person.DOB);
            }
        }            
    }
}
Run Code Online (Sandbox Code Playgroud)