航班:找到最低价的航班组合

时间:2016-04-21 19:17:00

标签: c# linq

目的地可能有2个已连接的航班,例如

法兰克福到波士顿

法兰克福 - 伦敦(08:00-10:00,14:00-18:00等),航班号为fl1,fl2

伦敦 - 波士顿(10:00-12:00,16:00-20:00等),航班号为lb1,lb2

每个航班可能有A,B等类别(从便宜到昂贵)

我已经有笛卡尔式的所有组合:

fl1 / A - lb1 / A(fl1为航班号/ A为班级)
fl1 / A - lb1 / B
fl1 / B - lb1 / A
fl1 / B - lb1 / B
...
fl2 / B - lb2 / B

我应该在结束屏幕上显示的是每个目的地组合的最低价格航班:

fl1 / A - lb1 / A
fl1 / A - lb2 / A
fl2 / A - lb1 / A
fl2 / A - lb2 / A

如何使用linq查询/查询实现此目的?

我该怎么办才能找到

的最低价航班

我有目的地和飞行课程:

Class Destination 
{
    List<Flight> Flights
}

Class Flight{
    List<String> @Classes;   //such as A,B,C,D,E  
    String FlightId;       
}

到目前为止,我可以将以下航班列表展平:

var flights = destination.SelectMany(d=>d.flights);

但我无法弄清楚如何继续?

注意:我希望在简化我的实际案例时我没有犯错误

以下是我在html表结构中的情况:

enter image description here

1 个答案:

答案 0 :(得分:0)

对我来说尚不清楚,但如果每个目的地都有两个相连的航班

public class Destination
{
   public Flight Flight1 {get;set;}
   public Flight Flight2 {get;set;}
}

我会做这样的事情:

var comb =   (from dest in destinations
              from fc1 in dest.Fligth1.Classes.Select(s=>new {FlightId=dest.Flight1.FlightId, Class=s})
              from fc2 in dest.Fligth2.Classes.Select(s=>new {FlightId=dest.Flight2.FlightId, Class=s})
              select new {fc1, fc2}).OrderBy(e=>e.fc1.Class).ThenBy(e=>fc2.Class);

如果你想在Destination中列出你的航班列表,我想你可以使用List的索引器:

var comb =   (from dest in destinations
              from fc1 in dest.Flights[0].Classes.Select(s=>new {FlightId=dest.Flights[0].FlightId, Class=s})
              from fc2 in dest.Flights[1].Classes.Select(s=>new {FlightId=dest.Flights[1].FlightId, Class=s})
              select new {fc1, fc2}).OrderBy(e=>e.fc1.Class).ThenBy(e=>e.fc2.Class);