Yurii N.
Yurii N.

Reputation: 5703

Skip and Take in Entity Framework Core

I have simple POCO classes:

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; }
}

And I have query, that returns libraries with already included books:

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

I'm trying to skip 5 libraries and then take 10 of them:

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

The problem is, that when I'm trying to perform Skip and Take methods on this query, it returns libraries without included list of books.

How can I work with Skip and Take, with saving previously included entities?

Upvotes: 13

Views: 30304

Answers (1)

ocuenca
ocuenca

Reputation: 39326

Make sure to follow the sequence of OrderBy, Skip, Take. Usually you need to Order By first before use Skip and Take methods. (Even just changing the order of Take and Skip will impact the results) Try ordering by name like this way:

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

As far as I remember your query should be translated using OFFSET-FETCH filter which requires an ORDER BY clause to exist.

Upvotes: 15

Related Questions