2013-10-15 4 views
5

Ich habe eine Klasse namens Item:Verwenden LINQ, um eine Liste von angepassten sublist Werte in C# wählen

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

und

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

Ich möchte auf eine Liste Item Basis erhalten Sprache anpassen.

So:

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; 

Ich möchte eine Liste der Elemente filtern, wenn ihre Unterliste (bedeutet Liste der Sprachen) enthält currentLanguage.

Wie geht das mit LINQ?

Antwort

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

FYI Ihre bestehende Lösung ist nicht weit weg, alles, was Sie tun müssen, ist der unnötigen Select(...) Anruf loszuwerden, und Sie haben es also

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

Danke, funktioniert wie ein Charme ist:) –

Verwandte Themen