LINQ - 在对象列表中的对象中按属性选择

时间:2018-03-29 20:46:27

标签: c#

我有一个名为LanguageItem的自定义对象列表。该LanguageItem包含一个名为“Tag”的项目列表。每个标签都有一个ID。

现在我已经阅读了LINQ,但所有的例子(我在这个网站和其他人在阅读我的问题之前阅读过)似乎都集中在你正在搜索的列表对象中的一个属性。

所以我想说我有一个标签,所以我有我的标签ID。我想要的是一个LanguageItems列表,其中包含一个带有该ID的标签。

我有过几次尝试,但我似乎没有到任何地方,所以我转向你们。

2 个答案:

答案 0 :(得分:5)

查看此代码是否对您有所帮助。

public IEnumerable<LanguageItem> GetItemsByTagID(string targetID)
{
    var result = LanguageItems.Where(lItem => lItem.Tags.Any(tagItem => tagItem.ID == targetID));
    return result;
}

答案 1 :(得分:1)

这应该这样做

var FoundLanguageItems = LanguageList.Where(ThisLang => ThisLang.Tags.SingleOrDefault(ThisTag => ThisTag.id == SearchId) != null);

这基本上嵌套了两个LINQ查询。内部查询就是这个。

ThisLang.Tags.SingleOrDefault(ThisTag => ThisTag.id == SearchId)

这意味着,给定一个名为ThisLang的Language对象,给我一个具有搜索标记id的Tag对象,或者如果ThisLang.Tags中没有具有该搜索ID的标记对象,则给我null。

< p> 如果此内部查询返回null,则表示该语言没有带该ID的标记。

外部查询是

LanguageList.Where(ThisLanguage => INNER_QUERY != null)

这意味着,从LanguageList,给我INNER_QUERY没有返回null的语言,这意味着,内部查询找到至少一个匹配的标记,因此它返回了一个NOT_NULL值。