2014-02-18 9 views
6

Ich habe ein Wörterbuch, das wie so aussieht: Dictionary<Search_Requests, List<Tuple<Search_Subjects, SearchData>>>Verwenden Sie LINQ, um eine Eigenschaft in einer Liste von Listen zu kombinieren?

In der SearchData Klasse gibt es eine Eigenschaft SearchCode genannt ist. Was ich tun möchte, ist ein Array von jedem Suchcode, der in diesem Wörterbuch erscheint. Ich könnte das mit ein paar Loops machen, aber ich würde lieber LINQ verwenden. Leider kann ich mir nicht vorstellen, wie ich das machen soll. Ich habe versucht,

RequestDictionary.Select(s => s.Value.Select(z => s.Value.Select(x => x.Item2.SearchCode).ToArray()).ToArray()).ToArray(); 

Aber das mir gerade bekam eine string[][][], die nicht schließen ist, was ich wollte. Kann ich einen Schub in die richtige Richtung bekommen?

+1

Check out 'Select()' - http://msdn.microsoft .com/de-us/library/system.linq.enumerable.selectmany% 28v = vs.110% 29.aspx – itsme86

+0

Wenn ich das richtig verstehe, muss ich nur meine äußeren Auswahl in 'SelectMany' ändern und es sollte gut sein – cost

Antwort

6

können Sie .SelectMany() verwenden, um die Ergebnisse zu glätten:

RequestDictionary 
    .SelectMany(s 
     => s.Value.SelectMany(z => s.Value.Select(x => x.Item2.SearchCode)) 
    .ToArray(); 
0

Der Trick ist .Select() und .SelectMany() zu kombinieren:

var codes = requestDictionary 
       //Extract all List<>s from the dictionary and enumerate them back-to-back: 
       .SelectMany(entry => entry.Value) 
       //Extract the SearchCode from each list item: 
       .Select(tuple => tuple.Item2.SearchCode) 
       .ToArray(); 
Verwandte Themen