首页 >后端开发 >C++ >如何通过EF Core中的导航属性返回的数据包含?

如何通过EF Core中的导航属性返回的数据包含?

Barbara Streisand
Barbara Streisand原创
2025-01-31 02:56:12878浏览

How Can I Filter Data Returned by Navigation Properties in EF Core Includes?

在 EF Core 中过滤 Include

通过过滤 Include,您可以在查询期间缩小导航属性返回的数据范围。当您需要根据包含实体的属性进行过滤时,这尤其有用。

示例

考虑以下代码:

<code class="language-csharp">using (var context = new BloggingContext())
{
    var blogs = context.Blogs
        .Include(blog => blog.Posts)
            .ThenInclude(post => post.Author)
        .ToList();
}</code>

此代码包含每个博客的所有帖子和作者。要根据作者姓名过滤结果,可以使用 Where 操作:

<code class="language-csharp">using (var context = new BloggingContext())
{
    var blogs = context.Blogs
        .Include(blog => blog.Posts)
            .ThenInclude(post => post.Author)
        .Where(blog => blog.Posts.Any(p => p.Author == "me")) // 修正后的Where条件
        .ToList();
}</code>

支持的操作

EF Core 5 支持以下用于过滤 Include 的操作:

  • Where
  • OrderBy(Descending)/ThenBy(Descending)
  • Skip
  • Take

重要说明

  • 每个导航属性只允许一个过滤器。
  • 后续的过滤 Include 会累积结果。
  • 即使启用了延迟加载,过滤 Include 也被认为已加载。
  • 过滤器表达式必须是一个“独立”谓词,可以独立用于过滤集合。

过滤 Include 与查询过滤

过滤 Include 不会影响主查询返回的项目数量。要过滤主查询结果,请使用单独的 Where 操作以及 Include。

投影和过滤 Include

投影通常会忽略 Include,无论它们是否已过滤。但是,如果投影中的实体可以包含,则 Include 将应用于它。 (注意:原文中对投影和过滤Include的描述过于简略,此处补充说明更清晰。)

以上是如何通过EF Core中的导航属性返回的数据包含?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn