如何使用 LINQ 合并树(和总和计数)
本文关键字:何使用 LINQ 合并 | 更新日期: 2023-09-27 18:27:58
假设我有这些类:
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; }
}
假设这是我在List<Product>
中添加一些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
如果我正确理解您的问题,这是非常典型的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<Product>
。
虽然康拉德的答案很接近,但它并没有完全提供你想要的东西。它需要使用匿名类型和两个组。
这里有一个小提琴: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()
})
});