假设我有这些课程:

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()
        })
});

07-27 19:47