如何使用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
。