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

C# 如何使用LINQ合并树(和和计数)?,c#,linq,tree,C#,Linq,Tree,假设我有这些课程: 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> Option

假设我有这些课程:

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; }
}
公共类选项
{
public int OptionID{get;set;}
公共布尔值被选为{get;set;}
}
公共类产品
{
public int ProductID{get;set;}
公共整数数量{get;set;}
公共列表选项{get;set;}
}
假设这是我将一些
产品
对象添加到
列表

2x产品1
备选案文1
备选案文1
备选案文2
选项ID 2

2x产品1
备选案文1
备选案文1
备选案文2
选项ID 2

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

4x产品1
4x选项ID 1

4x选项ID 2

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


因此,
result
是一个
列表
,包含与
ProductID

相关的产品。虽然Konrad的答案很接近,但它并不能提供您想要的东西。它需要使用匿名类型和两个组

这里有一把小提琴:和它最相关的代码

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

您当前的
ChartItems
类无法实现您的最终目标。在
ChartItems
类中,
Quantity
是否表示
产品
选项
的数量,
List OptionID
是否只是所有选定的
OptionID
值的列表。-1如果在两个人提供了正确答案后更改了问题,那么最好将其中一个答案标记为原始问题的正确答案,然后问一个新问题。@DeMama当我能够添加
IsSelected
过滤器时,我不确定将结果移植到
ChartItems
类中的要求是什么。你问题的那一部分对我来说是不透明的。
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()
        })
});