如何使用LINQ合并树(和总和计数)?

说我有这些课程:

public class Option { public int OptionID { get; set; } public bool IsSelected { get; set; } } public class Product { public int ProductID { get; set; } public int Quantity { get; set; } public List Options { get; set; } } 

假设在将一些Product对象添加到List之后,这将是我的结果

2x Product 1 OptionID 1 OptionID 1 OptionID 2 OptionID 2

2x Product 1 OptionID 1 OptionID 1 OptionID 2 OptionID 2

如何使用LINQ(lambda)将这些结果转换为单个结果,其中IsSelected = true

4x Product 1 4x OptionID 1 4x OptionID 2

虽然康拉德的答案很接近,但它并没有提供你想要的东西。 它需要使用匿名类型和两个组。

这是一个小提琴: https : //dotnetfiddle.net/v907me及其最相关的代码。

 var query = products.GroupBy(p => p.ProductID, (key, values) => new { ProductID = key, Quantity = values.Sum(v => v.Quantity), Options = values .SelectMany(v => v.Options.Where(o => o.IsSelected)) .GroupBy(o => o.OptionID, (k, v) => new { OptionID = k, Quantity = v.Count() }) }); 

如果我正确理解你的问题,这是非常典型的GroupBy

 var result = data.GroupBy(x => x.ProductID, (key, values) => new Product() { ProductID = key, Quantity = values.Sum(p => p.Quantity), Options = values.SelectMany(p => p.Options).ToList() }).ToList(); 

因此, result是包含与ProductID产品的List