我在列表中有一个列表。正如您从我的 foreach 示例中看到的那样,我首先通过航班,然后通过 SEGMENTS,我在 1 行中打印 1 个航班的所有航段,然后我将 NewLine 用于新航班,它可以由 1 个航段或更多航段组成. 1 段由出发时间和到达时间组成。
当我使用foreach时,我可以在每个段完成后换行,如下所示:
foreach (var flight in f)
{
foreach (var flight1 in flight.Segments.Where(x=>x.DepartureDate > DateTime.Now))
{
Console.Write(
"Departure: {0}, Arrival: {1}; ",
flight1.DepartureDate,
flight1.ArrivalDate);
}
Console.WriteLine(Environment.NewLine);
}
结果:
出发:2.9.2013 12:23:05,到达:2.9.2013 2:23:05;
出发:2.9.2013 12:23:05,到达:2.9.2013 2:23:05;出发:2.9.2013 3:2 3:05,到达:2.9.2013 5:23:05;
这很好用。我现在很感兴趣我怎么能用 Linq 做这个?我有 Linq 的结果,但所有结果都在一行中,不知道在哪里放置“NewLine”以将每个航段放入新行而不是一行中的所有航段......如果我使用 Environment.NewLine,它会将每个段放在新行中。但是 1 个航班的航段应该在 1 行。
我使用这个 Linq 方法:
public IEnumerable<Segment> GetActiveFlights(IEnumerable<Flight> flights)
{
var query = from flight in flights
from segment in flight.Segments
where segment.DepartureDate > DateTime.Now
select new Segment()
{
DepartureDate = segment.DepartureDate,
ArrivalDate = segment.ArrivalDate
};
return query;
}
然后我用它来迭代:
IEnumerable<Flight> f = flightList.GetFlights();
foreach (var flight in flightFilter.GetActiveFlights(f))
{
Console.Write(
"Departure: {0}, Arrival: {1}; ",
flight.DepartureDate,
flight.ArrivalDate);
}
结果:
出发:2.9.2013 12:23:05,到达:2.9.2013 2:23:05;出发时间:2.9.2013 12:23:05,到达时间:2.9.2013 2:23:05;出发:2.9.2013 3:23:05,到达:2.9.2013 5:23:05;出发:2.9.2013 12:23:05,到达:1.9.2013 6:23:05;出发时间:2. 9.2013 12:23:05,到达时间:2.9.2013 2:23:05;出发:2.9.2013 5:23:05,到达
但是在这里,我所有的结果都在一行中。我怎样才能使每个航班(由多个航段或 1 个航段组成)都写在新行中。