假设我有这些课程:
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<Option> Options { get; set; }
}
假设这是我将一些
Product
对象添加到List<Product>
后的结果。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()
})
});