【发布时间】:2014-04-17 17:27:25
【问题描述】:
我有一个类结构来表示一个项目的材料列表,每种材料都有一个附加属性列表。类似于以下内容:
-
MaterialList-
MaterialPiece-
AdditionalPropertyListAdditionalProperties
-
-
每个类都有一个ChildPieces list 属性,其中包含下一层的项目列表;例如,MaterialList 类有
public List<MaterialPiece> ChildPieces {get;set;}
所以这个例子可能是
- 轮组
- 轮子
- 车轮属性
- 数量:1
- 部件号:R1000
- 车轮属性
- 轮子
- 车轮属性
- 数量:1
- 部件号:R1000
- 车轮属性
- 轮子
我想要做的是聚合 MaterialList 以根据 MaterialPiece 对象的某些属性(上例中的 Partnumber)将它们组合在一起。
这会导致
- 轮组
- 轮子
- 车轮属性
- 数量:2
- 部件号:R1000
- 车轮属性
- 轮子
我想在最外层的对象中做这个,即我想实现
class MaterialList : BasePiece
{
public void AggregateMaterialPieces()
{
var newList = ChildPieces.Where(...)
}
}
所以我的问题是:我可以使用 LINQ 根据 AdditionalPropertyList 中的一些已知值对 MaterialList 中的 MaterialPieces 进行分组和求和吗?
【问题讨论】:
-
这听起来像是...
SelectMany-Man 的工作!像ChildPieces.SelectMany(piece => piece.AdditionalPropertyList)这样的东西会给你一个集合,其中包含每个附加属性列表包含的所有项目。不确定这是否是一个完整的答案,但这应该是一个有用的步骤。 -
@Magus - 这会让我不把结构弄平吗?即,我仍然想要一个离散的
MaterialPiece对象列表,但按AdditionalProperties条目之一分组,并在另一个上求和。 -
@Geoff 你可以做扁平化结构,然后根据需要分组
-
Linq 有
Select如果你不想弄平东西,还有GroupBy等等。你有选择。 -
@Magus - 谢谢,我正在使用基于this answer 的 Select 和 Sum,但我一直在努力弄清楚如何使它与我所拥有的嵌套结构一起工作(因此我的问题)。