具有求和函数和嵌套记录的 Linq 组

Linq group with sum function and nested records

有一个合集:

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 在查询结果中?

是的,"nestedsales" 不是必需的:

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);
     }
 }