2016-05-07 10 views
-1

Ich habe diese Struktur der Klasse
Flug
..OriginDestinations
.... FlightSegmentsLinq Äquivalent in Lambda

Meine Frage ist prett leicht, was in Lambda-Ausdruck äquivalent sein können:

var result1 = (
    from sf in selectedFlights 
    from odo in sf.OriginDestinationOptions 
    from fs in odo.FlightSegments 
    select new FlightNumberAndClass { 
     FlightNumber = fs.FlightNumber, 
     FlightClass = fs.FlightClass 
    }); 

wo result1 IEnumerable<FlightNumberAndClass>

ist diese Art von ich habe versucht, aber:

var result2 = 
    selectedFlights.Select(
     x => x.OriginDestinationOptions.Select(
      y => 
       y.FlightSegments.Select(
        z => new FlightNumberAndClass { 
         FlightNumber = z.FlightNumber, 
         FlightClass = z.FlightClass 
        } 
        ) 
      ) 
     ); 

es gibt mir result2 ist Art von „so etwas wie“System.Linq.Enumerable.WhereSelectListIterator<IEnumerable<IEnumerable<FlightNumberAndClass>>>

+0

Anstatt die volle Arbeits Entsendung Code i mit einer Spitze zur Verfügung stellen werden: Verwenden Sie Select statt Wählen Sie, wenn Sie eine Auswahl tun einer Sammlung. Es wird das Ergebnis "abflachen". –

+0

@PeterBons Auch ohne voll funktionsfähigen Code lohnt es sich, als Antwort zu posten. Es ist völlig korrekt und sollte mehr als genug sein, um dem OP zu helfen. – hvd

+0

@ downvoter Könnten Sie mich über Ihren Downvote aufklären? –

Antwort

2

SelectMany Projiziert jedes Element einer Sequenz in ein IEnumerable<T> und fasst die resultierenden Sequenzen in einer einzigen Sequenz.

IEnumerable<FlightNumberAndClass> result2 = selectedFlights 
    .SelectMany(sf => sf.OriginDestinationOptions 
     .SelectMany(odo => odo.FlightSegments 
      .Select(fs => new FlightNumberAndClass 
       { 
        FlightNumber = fs.FlightNumber, 
        FlightClass = fs.FlightClass 
       } 
      ) 
     ) 
    ); 
0

In Situation wie dieser Sie SelectMany wie in diesem Beispiel verwenden können:

List<List<List<string>>> list1 = new List<List<List<string>>> 
      { 
       new List<List<string>> { 
       new List<string>{"a","b","c","d","e"}, 
       new List<string>{"a","b","c","d","e"}, 
       new List<string>{"a","b","c","d","e"} 
       }, 
       new List<List<string>> { 
       new List<string>{"a","b","c","d","e"}, 
       new List<string>{"a","b","c","d","e"}, 
       new List<string>{"a","b","c","d","e"} 
       }, 
       new List<List<string>> { 
       new List<string>{"a","b","c","d","e"}, 
       new List<string>{"a","b","c","d","e"}, 
       new List<string>{"a","b","c","d","e"} 
       } 
      }; 

      var result = list1.SelectMany(a => a.SelectMany(b => b.Select(c => c))).ToList(); 
Verwandte Themen