使用LINQ以按C#中匹配的子列表值选择列表

Sna*_*yes 5 c# linq

我有一个叫做的课Item:

public sealed class Item 
{
    public int Id { get; set; }
    public string Name { get; set; }
    public List<Language> Languages { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

public sealed class Language 
{
   public int Id { get; set; }
   public string Code { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

我想得到一个Item基于匹配语言的列表.

所以:

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;
Run Code Online (Sandbox Code Playgroud)

如果他们的子列表(意味着语言列表)包含,我想过滤项目列表currentLanguage.

如何使用LINQ做到这一点?

Jam*_*mes 16

var filtered = GetListOfItems().Where(x => x.Languages.Any(l => l.Code == currentLangCode));
Run Code Online (Sandbox Code Playgroud)

仅供参考,你现有的解决方案并不遥远,所有你需要做的就是摆脱不必要的Select(...)电话,你就拥有了它

var filtered = from i in GetListOfItems()
               where i.Languages.Any(l => l.Code == currentLangCode)
               select i;
Run Code Online (Sandbox Code Playgroud)