将两个List <object>合并到Linq </object>中的一个List中

时间:2014-04-11 15:29:07

标签: c# linq list

我有两个清单。 BeamElevations<Elevation>FloorElevations<Elevation>。如何将这些合并到Elevations<Elevation>列表中并根据他们使用Linq的Elevation进行排序?

5 个答案:

答案 0 :(得分:29)

使用ConcatOrderBy

var result = list1.Concat(list2).OrderBy(x => x.Elevation).ToList();

如果您想删除重复项并获取一组唯一的元素,您还可以使用Union方法:

var result = list1.Union(list2).OrderBy(x => x.Elevation).ToList();

为了使其正常工作,您需要在课堂上覆盖EqualsGetHashCode方法。

答案 1 :(得分:4)

最初你合并它们如下:

Elevations=BeamElevations.Union(FloorElevations)
                         .ToList();

然后

Elevations=Elevations.OrderBy(x=>x.Elevation)
                     .ToList();

或者一步到位:

Elevations=BeamElevations.Union(FloorElevations)
                         .OrderBy(x=>x.Elevation)
                         .ToList();

实现这一目标的另一种方法是使用Concat

Elevations=BeamElevations.Concat(FloorElevations)
                         .OrderBy(x=>x.Elevation)
                         .ToList();

答案 2 :(得分:2)

 List<Elevation> Elevations= FloorElevations.Concat(BeamElevations).ToList();

答案 3 :(得分:2)

使用List.AddRange

   list1.AddRange(list2);
   list1.OrderBy(l => l.Elevation);

答案 4 :(得分:0)

如果有任何开发者可能正在寻找VB.NET中的解决方案,请转到:

Dim list1 As List(Of MyObject)
Dim list2 As List(Of MyObject)
Dim mergedAndSortedList As List(Of MyObject)

mergedAndSortedList = (From obj In list1.Union(list2)
                       Order By obj.MyPropertyToSortOn
                       Select obj).ToList()