我有一个表示项目材料列表的类结构,每个材料都有一个附加属性列表。类似于以下内容:
MaterialList
MaterialPiece
AdditionalPropertyList
AdditionalProperties
每个类都有一个ChildPieces
列表属性,其中包含下一级别的项目列表;例如,MaterialList
类有
public List<MaterialPiece> ChildPieces {get;set;}
所以这个例子可能是
我想要做的是聚合MaterialList,将MaterialPiece对象基于它们的一些属性组合在一起 - 上例中的Partnumber。
这会导致
我想在最外面的对象中执行此操作,即我想实现
class MaterialList : BasePiece
{
public void AggregateMaterialPieces()
{
var newList = ChildPieces.Where(...)
}
}
所以我的问题:我可以使用LINQ根据AdditionalPropertyList中的一些已知值对MaterialList中的MaterialPieces进行分组和求和吗?
答案 0 :(得分:0)
您的问题不够具体,但无论如何,这里有一些代码可以为您提供每个部分的数量。
var groupings = list.SelectMany(x => x.AdditionalPropertyList).GroupBy(x => x.PartNumber).Select(g => new { PartNumber=g.Key, Quantity=g.Sum(x => x.Quantity) } );
foreach (var g in groupings)
Console.WriteLine("PartNumer: {0} Total: {1}", g.PartNumber, g.Quantity);
我不肯定这是正确的,如果它没有工作让我知道,我会尽量抽出时间来实际测试它。基本思想是将列表展平为所有其他属性,然后按partnumber对这些属性进行分组,然后为每个分组创建一个新的匿名对象,该对象使用partnumber(组密钥)并在分组列表上调用aggregate得到所有数量的总和。