使用LINQ </list <column> </partialcolumn>将List <partialcolumn>合并到<list <column>中

时间:2014-05-03 17:12:46

标签: c# linq list

我想使用 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

2 个答案:

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