2013-10-15 8 views
5

ho una classe denominata Item:utilizzare LINQ al fine di selezionare un elenco dai valori sottolista abbinati in C#

public sealed class Item 
{ 
    public int Id { get; set; } 
    public string Name { get; set; } 
    public List<Language> Languages { get; set; } 
} 

e

public sealed class Language 
{ 
    public int Id { get; set; } 
    public string Code { get; set; } 
} 

voglio ottenere un elenco di Item sulla base di una abbinare il linguaggio

Quindi:

string currentLangCode = "EN"; 
List<Item> items = GetListOfItems(); 

// that's not correct, I need an advice here 
var query = from i in items 
      where (i.Languages.Select(l=>l).Where(l=>l.Code.Equals(currentLangCode)) 
      select i; 

voglio filtrare un elenco di elementi se il loro elenco secondario (significa elenco delle lingue) contiene currentLanguage.

Come farlo utilizzando LINQ?

risposta

16
var filtered = GetListOfItems().Where(x => x.Languages.Any(l => l.Code == currentLangCode)); 

FYI soluzione esistente non è lontano, tutto quello che dovete fare è sbarazzarsi del superfluo Select(...) chiamata e lo avete cioè

var filtered = from i in GetListOfItems() 
       where i.Languages.Any(l => l.Code == currentLangCode) 
       select i; 
+0

Grazie, è funziona come un fascino:) –

Problemi correlati