リスト内にリストがあります。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 で結果を取得しましたが、すべての結果が 1 行に表示されます。すべてのセグメントを 1 行に表示するのではなく、各フライト セグメントを新しい行に配置するために「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 行に表示されます。各フライト (複数のセグメントまたは 1 つのセグメントで構成される) が新しい行に記述されるようにするにはどうすればよいですか?