在VB.net中合并并订购2个不同对象的列表?

时间:2012-03-15 20:11:59

标签: vb.net linq list

我有2种不同类型的收藏品 - 让我们称之为汽车和卡车。两者都共享基类车辆,其中包含属性乘客。

我想将它们合并到该属性订购的单个集合中。例如,合并汽车和卡车以及乘客订购。

我该怎么做?

2 个答案:

答案 0 :(得分:3)

您可以使用Concat Linq方法组合两个列表。

Dim vehicles = cars.cast(Of Vehicle)().Concat(trucks.cast(Of Vehicle)())
Dim orderedVehicles = vehicles.OrderBy(Function(v) v.Passengers).ToList()

答案 1 :(得分:2)

如果您可以使用LINQ并且使用.NET 4,那么很简单:

Dim vehicles List<Vehicle> vehicles = _
    cars.Concat(Of Vehicle)(trucks).OrderBy(Function(x) x.Passsengers).ToList()

如果您不使用.NET 4(因此无法利用通用协方差),则需要使用Cast

Dim vehicles = cars.Cast(Of Vehicle)() _
                   .Concat(trucks.Cast(Of Vehicle)) _
                   .OrderBy(Function(x) x.Passsengers) _
                   .ToList()

(对于瞬态C#主义道歉。)

...如果您不使用.NET 3.5,它会变得更加痛苦。 (可行,但很乱。)