跳过并接受 Entity Framework Core

问题描述 投票:0回答:1

我有简单的 POCO 课程:

public class Library
{
    [Key]
    public string LibraryId { get; set; }

    public string Name { get; set; }

    public List<Book> Books { get; set; }
}

public class Book
{
    [Key]
    public string BookId { get; set; }

    public string Name { get; set; }

    public string Text { get; set; }
}

我有查询,返回包含已包含书籍的图书馆:

dbContext.Set<Library>.Include(x => x.Books);

我正在尝试跳过 5 个库,然后获取其中的 10 个:

await dbContext.Set<Library>.Include(x => x.Books).Skip(5).Take(10).ToListAsync();

问题是,当我尝试对此查询执行

Skip
Take
方法时,它返回不包含书籍列表的图书馆。

如何使用

Skip
Take
来保存之前包含的实体?

c# entity-framework entity-framework-core
1个回答
12
投票

确保遵循

OrderBy
Skip
Take
的顺序。 通常在使用
Skip
Take
方法之前,您需要先排序。 (即使只是改变 Take 和 Skip 的顺序也会影响结果)尝试按名称排序:

await dbContext.Set<Library>().Include(x => x.Books)
                              .OrderBy(x=>x.Name)
                              .Skip(5)
                              .Take(10)
                              .ToListAsync();

据我记得您的查询应该使用

OFFSET-FETCH
过滤器进行翻译,该过滤器需要存在
ORDER BY
子句。

© www.soinside.com 2019 - 2024. All rights reserved.