首頁 >後端開發 >C++ >如何通過EF Core中的導航屬性返回的數據包含?

如何通過EF Core中的導航屬性返回的數據包含?

Barbara Streisand
Barbara Streisand原創
2025-01-31 02:56:12877瀏覽

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