我有两个列表。 BeamElevations<Elevation>
和FloorElevations<Elevation>
.如何使用 Linq 将它们合并到Elevations<Elevation>
列表中并根据其提升对它们进行排序?
使用 Concat
和 OrderBy
var result = list1.Concat(list2).OrderBy(x => x.Elevation).ToList();
如果要删除重复项并获得一组唯一的元素,也可以使用Union
方法:
var result = list1.Union(list2).OrderBy(x => x.Elevation).ToList();
为了使它正常工作,您需要覆盖类中的Equals
和GetHashCode
方法。
最初,您可以像下面这样合并它们:
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();
Use List.AddRange
list1.AddRange(list2);
list1.OrderBy(l => l.Elevation);
List<Elevation> Elevations= FloorElevations.Concat(BeamElevations).ToList();
如果有任何开发人员可能正在寻找 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()