目的地可能有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表结构中的情况:
答案 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);