我目前有多个火车站,可容纳火车在不同时间到达。每列火车都有一个唯一的标识符,以便其他站点知道该火车来自/去往何处。
以下是火车的构造示例:
class App
{
public static List<Station> Stations = new List<Station>()
{
new Station()
{
Name = "Birmingham New Street",
TrainsArriving = new List<Train.Train> ()
{
new Train.Train()
{
ID = "X1001",
Arrival = DateTime.Now,
Carriges = new List<Carrige>()
{
new Carrige()
}
},
new Train.Train()
{
ID = "Y1001",
Arrival = DateTime.Now.AddMinutes(20),
Carriges = new List<Carrige>()
{
new Carrige()
}
}
}
},
new Station()
{
Name = "Marston Green",
TrainsArriving = new List<Train.Train> ()
{
new Train.Train()
{
ID = "X1001",
Arrival = DateTime.Now.AddMinutes(30),
Carriges = new List<Carrige>()
{
new Carrige()
}
},
new Train.Train()
{
ID = "Y1001",
Arrival = DateTime.Now.AddMinutes(50),
Carriges = new List<Carrige>()
{
new Carrige()
}
}
}
}
};
}
我现在要搜索从伯明翰新街出发并到达马斯顿·格林的火车。这应该给我提供两种不同的火车,将X1001和T1001作为List<Train>
。
我尝试使用Intersect
,但无法根据ID属性弄清楚如何加入列表。
到目前为止,这是我的尝试:
Train.Station departingStation = App.Stations.Find(x => x.Name.Equals("Birmingham New Street"));
Train.Station arrivingStation = App.Stations.Find(x => x.Name.Equals("Marston Green"));
List<Train> trains = departingStation.TrainsArriving.Intersect(arrivingStation.TrainsArriving).ToList();
任何帮助将不胜感激。
更新:火车应根据时间递增进行查询。仅带出将来行驶的火车,而不是过去的火车(这样我们可以找到离开和到达而不是向后行驶的火车)。
答案 0 :(得分:2)
我不称其为联合,但要获得从伯明翰新街出发并到达马斯顿格林的火车,您可以使用Where
子句从{{1} }:
departingStation
答案 1 :(得分:1)
我只用Linq。 如果您只需要从伯明翰新街出发并到达马斯顿格林的火车,则还需要在到达时间上进行排序
List<Train> trains = departingStation.TrainsArriving.
Where(t => arrivingStation.TrainsArriving.
Any(a=>t.ID==a.ID && t.Arrival < a.Arrival )).ToList();