动态LINQ查询与嵌套分组

3
我将尝试使用动态查询创建嵌套分组。
以下是我的数据集合。
var invoices = new List < Purchase > () {
    new Purchase() {
        Id = 1, Customer = "a", Date = DateTime.Parse("1/1/2009")
    }, new Purchase() {
        Id = 2, Customer = "a", Date = DateTime.Parse("1/2/2009")
    }, new Purchase() {
        Id = 3, Customer = "a", Date = DateTime.Parse("1/2/2009")
    }, new Purchase() {
        Id = 4, Customer = "b", Date = DateTime.Parse("1/1/2009")
    }, new Purchase() {
        Id = 5, Customer = "b", Date = DateTime.Parse("1/1/2009")
    }, new Purchase() {
        Id = 6, Customer = "b", Date = DateTime.Parse("1/2/2009")
    }
 };

这个linq查询返回了期望的结果。
  var tree = invoices.GroupBy(x => x.Date).Select(x => new
        {
            Key = x.Key,
            Items = x.GroupBy(y => y.Customer).Select(y => new
            {
                Key = y.Key,
                Items = y
            })
        }).ToList();

以下是上述LINQ查询的输出结果:

Output of linq query result

但我需要以不同的顺序对不同的列进行分组。
因此,我尝试创建动态LINQ查询。但是我的代码块结果与之前的LINQ查询不同。
var groupedInvoiceItems = invoices.AsQueryable().GroupBy("new (Date, Customer)", "it");

你的动态查询结果是什么? - ZwoRmi
什么是“动态查询”?它与System.Linq.Dynamic有关吗? - Ivan Stoev
我是指动态LINQ查询。请查看以下链接:http://www.c-sharpcorner.com/UploadFile/deveshomar/dynamic-linq-library-in-C-Sharp/ - deadpool
这与我的链接中的内容相同。您需要明确说明这些事情,因为您可以看到这些都是非官方来源,所以没有人应该知道您使用这些术语的含义。至于具体问题,我认为他们不支持您所要求的内容,但当然也可能是我错了。祝好运。 - Ivan Stoev
1个回答

0
你可以使用 泛型 来完成这个操作。只需将你的 Lambda 传递给一个泛型方法即可。
类似这样:
private IEnumerable<PurchaseGrp> BuildList<TSource>(IQueryable<TSource> allRecords,
            Func<TSource, string> selector)
{
   var result = allRecords.GroupBy(x = > x.selector(x));
   return result;
}

返回类型可以是一个新的分组类型PurchaseGrp,也可以与您的源代码相同(Purchase)。


如果您只是像对待 IEnumerable 一样处理 IQueryable,那么您不应该接受它。这将不允许操作在数据库中发生。 - Servy

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接