我想使用 LINQ 将List<PartialColumn> PartialColumns
合并到List<Column> Columns
。
public class PartialColumn
{
public double StartElevation { get; set; }
public double EndElevation { get; set; }
public int ColId { get; set; }
public string Section { get; set; }
}
PartialColumns:
ColId StartElevation EndElevation Section
-------------------------------------------------------
1 0 300 COL1
2 0 600 COL1
1 300 600 COL2
我想将具有相同ColId
的对象合并到Column
对象中,并将这些对象添加到List<Column> Columns
。
每个Section
对象的PartialColumn
属性值将添加到合并的List<string> ListOfSections
的{{1}}属性中。
Column
的{{1}}属性的最小值将设置为最终合并StartElevation
的{{1}}属性。
PartialColumn
的{{1}}属性的最大值将设置为最终合并StartElevation
的{{1}}属性。
Column
列:
EndElevation
这是我到目前为止所做的。我似乎在添加PartialColumn
部分时遇到了问题。
EndElevation
答案 0 :(得分:4)
你离得太远......
var newColumns = PartialColumns.GroupBy(x=>x.ColId)
.Select(x=>new Column(){
StartElevation = x.Min(col=>col.StartElevation),
EndElevation = x.Max(col=>col.EndElevation),
Id = x.Key,
ListOfSections = x.Select(col=>col.Section).ToList()
}).ToList()
上面以相同的方式进行了分组。我没有打扰使用匿名对象,而只是将它作为单个linq语句完成。
关键是我刚刚使用select来从分组的partialColumns中过滤以获取新列表中的部分。
然后进入一个新列表,您可以轻松地将其添加到其他列表,连接它或其他任何您想要做的事情。
注意:代码直接写入此处,因此可能有拼写错误,但通常应该是好的。
答案 1 :(得分:1)
from p in partialColumns
group p by p.ColId into grp
select new Column
{
Id = grp.Key,
StartElevation = grp.Min(x => x.StartElevation),
EndElevation = grp.Max(x => x.EndElevation),
ListOfSections = grp.Select(x => x.Section).ToList()
};