使用LINQ通过匹配子列表值来选择一个列表(C#)

5
我有一个叫做的类:
public sealed class Item 
{
    public int Id { get; set; }
    public string Name { get; set; }
    public List<Language> Languages { get; set; }
}

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

我希望能够根据匹配的语言获取一个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;

我想筛选一个项目列表,如果它们的子列表(即语言列表)包含 currentLanguage。如何使用LINQ实现呢?
1个回答

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

提醒一下,您现有的解决方案已经很接近了,您只需要摆脱不必要的Select(...)调用即可,就像这样:

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接