如何基于C#中的值将列表连接在一起

时间:2020-06-29 11:24:18

标签: c# list

我目前有多个火车站,可容纳火车在不同时间到达。每列火车都有一个唯一的标识符,以便其他站点知道该火车来自/去往何处。

以下是火车的构造示例:

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();

任何帮助将不胜感激。

更新:火车应根据时间递增进行查询。仅带出将来行驶的火车,而不是过去的火车(这样我们可以找到离开和到达而不是向后行驶的火车)。

2 个答案:

答案 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();