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

Vah*_*hid 13 c# linq list

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

Sel*_*enç 31

使用ConcatOrderBy

var result = list1.Concat(list2).OrderBy(x => x.Elevation).ToList();
Run Code Online (Sandbox Code Playgroud)

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

var result = list1.Union(list2).OrderBy(x => x.Elevation).ToList();
Run Code Online (Sandbox Code Playgroud)

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

  • @Vahid是的你可以,但如果你为你的类重写equals和gethascode它将删除重复.它与Concat不同,请参阅[文档](http://msdn.microsoft.com/en-us/library/bb341731( v = vs.110).aspx):_此方法从返回集中排除重复项._ (4认同)
  • 至于贬低者,我很抱歉,在我们的社区,有些人在没有留言的情况下进行了投票,关于出了什么问题.我认为应该改变. (3认同)
  • @Vahid我不知道,你应该试试看看.我会说Concat更快,因为它只是在没有比较它们的情况下合并项目.Union比Concat执行更多的工作 (2认同)

Chr*_*tos 5

最初,您将它们合并如下:

Elevations=BeamElevations.Union(FloorElevations)
    .ToList();
Run Code Online (Sandbox Code Playgroud)

然后

Elevations=Elevations.OrderBy(x=>x.Elevation)
    .ToList();
Run Code Online (Sandbox Code Playgroud)

或者一步:

Elevations=BeamElevations.Union(FloorElevations)
    .OrderBy(x=>x.Elevation)
    .ToList();
Run Code Online (Sandbox Code Playgroud)

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

Elevations=BeamElevations.Concat(FloorElevations)
    .OrderBy(x=>x.Elevation)
    .ToList();
Run Code Online (Sandbox Code Playgroud)

  • @ Selman22 我刚刚更新了我的答案以确保正确,再次感谢您。 (2认同)