我有两个清单。 BeamElevations<Elevation>
和FloorElevations<Elevation>
。如何将这些合并到Elevations<Elevation>
列表中并根据他们使用Linq的Elevation进行排序?
答案 0 :(得分:29)
var result = list1.Concat(list2).OrderBy(x => x.Elevation).ToList();
如果您想删除重复项并获取一组唯一的元素,您还可以使用Union
方法:
var result = list1.Union(list2).OrderBy(x => x.Elevation).ToList();
为了使其正常工作,您需要在课堂上覆盖Equals
和GetHashCode
方法。
答案 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)
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()