LINQ 查询查找所有标签?

标签 linq

我有一个名为“Notes”的管理文档的应用程序。与博客一样,Notes 可以根据一个或多个标签搜索匹配项,这些标签包含在 Note.Tags 集合属性中。标签具有名称和 ID 属性,并且根据 ID 进行匹配。用户可以指定多个要匹配的标签,在这种情况下,注释必须包含指定要匹配的所有标签。

我有一个非常复杂的 LINQ 查询来执行注释搜索,具有扩展方法和循环。坦率地说,它有一种真正的代码味道。我想用更简单的东西重写查询。我知道如果我将标签设为一个简单的字符串,我可以使用如下所示的内容:

var matchingNotes = from n in myNotes
                    where n.Tags.All(tag => searchTags.Contains(tag))

如果我的模型使用带有 ID 的 Tag 对象,我可以做那么简单的事情吗?查询会是什么样子。能用流畅的语法写出来吗?那会是什么样子?

最佳答案

我相信您可以在单个 LINQ 表达式中找到具有相关标签的注释:

IQueryable<Note> query = ... // top part of query

query = query.Where(note => searchTags.All(st =>
    note.Tags.Any(notetag => notetag.Id == st.Id)));

遗憾的是,AllAny 没有等效的“流畅语法”,因此您能做的最好的事情就是

query = from note in query
        where searchTags.All(st =>
            note.Tags.Any(notetag => notetag.Id == st.Id))
        select note;

这也好不了多少。

关于LINQ 查询查找所有标签?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3539404/

相关文章:

c# - 使用 LINQ 我有一个列表列表,如何选择每个列表中存在的所有对象?

c# - linq to xml - 摆脱空白的 xmlns

asp.net - 如何通过 LINQ 获得一级子级

c# - 加入不返回左表 C# lambda 中的所有元素

c# - Distinct() 如何处理对象列表?

c# - 我需要帮助将 VB.Net Linq 转换为 C# Linq

linq - 如何使用 linq/lambda 计算具有唯一属性的列表中的对象数?

c# - 将 LINQ 与 NHibernate 结合使用

linq - 使用 linq 查询对象的属性

c# - 成员是 "not supported in LINQ to Entities"