跳过并接受 Entity Framework Core

Yur*_* N. 6 c# entity-framework entity-framework-core

我有简单的 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; }
}
Run Code Online (Sandbox Code Playgroud)

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

dbContext.Set<Library>.Include(x => x.Books);
Run Code Online (Sandbox Code Playgroud)

我试图跳过 5 个库,然后选择其中的 10 个:

await dbContext.Set<Library>.Include(x => x.Books).Skip(5).Take(10).ToListAsync();
Run Code Online (Sandbox Code Playgroud)

问题是,当我尝试在此查询上执行SkipTake方法时,它返回没有包含书籍列表的图书馆。

如何使用SkipTake保存以前包含的实体?

oct*_*ccl 14

确保遵循OrderBy, Skip,的顺序TakeSkip通常在使用和方法之前需要先排序Take。(即使只是更改 Take 和 Skip 的顺序也会影响结果)尝试按名称排序,如下所示:

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

据我记得您的查询应该使用 OFFSET-FETCH需要ORDER BY存在子句的过滤器进行翻译。