我有简单的 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
来保存之前包含的实体?
确保遵循
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
子句。