Linq组具有sum函数和嵌套记录

时间:2016-02-28 15:42:07

标签: c# linq linq-group

有一个集合:

List<Tuple<string, string, int>> sales = new List<Tuple<string, string, int>> {
            Tuple.Create("Store 1", "Product 1", 1000),
            Tuple.Create("Store 2", "Product 2", 2000),
            Tuple.Create("Store 3", "Product 3", 1500),
            Tuple.Create("Store 3", "Product 3", 10000)};

我想得到这棵树:

Store 1, Product 1, 1000
   Store 1, Product 1, 1000
Store 2, Product 2, 2000
   Store 2, Product 2, 2000
Store 3, Product 3, 11500
   Store 3, Product 3, 1500
   Store 3, Product 3, 10000

我使用这个linq查询来构建树:

var group = from sale in sales
        group sale by new { sale.Item1, sale.Item2 } into g
        select new { g.Key.Item1, g.Key.Item2, Sum = g.Sum(e => e.Item3),nestedsales = (from s in g select s) };

和输出代码:

foreach (var e in group)
{
    Console.WriteLine(e.Item1 + ", " + e.Item2 + ", " + e.Sum);
    foreach(var sale in e.nestedsales )
    {
        Console.WriteLine('\t' + sale.Item1 + ", " + sale.Item2 + ", " + sale.Item3);
    }
}

工作正常!我只是想知道,这是最佳查询吗?我的意思是,是否可以在查询结果中不添加第四个字段 - nestedsales 来构建树?

1 个答案:

答案 0 :(得分:1)

是,&#34;嵌套销售&#34;没有必要:

var group = sales.GroupBy(sale=>new { sale.Item1, sale.Item2 });
foreach (var e in group)
{
    Console.WriteLine(e.Key.Item1 + ", " + e.Key.Item2 + ", " + e.Sum(t=>t.Item3));
    foreach (var sale in e)
    {
        Console.WriteLine('\t' + sale.Item1 + ", " + sale.Item2 + ", " + sale.Item3);
     }
 }