有一个集合:
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"不是必需的:
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);
}
}