有一个集合:
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 来构建树?
答案 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);
}
}