订单查询结果 many-to-many 加入 table

Order query results in a many-to-many join table

我正在使用 Razor Pages 和 Entity Framework Core 在 .NET Core 3.1 中编写网站代码。我有以下两个 tables,ComicsApplicationUser(自定义字段添加到 IdentityUser)。我已经实现了代码,使用户能够通过 Many-to-Many 加入 table UserComic add/remove 任何漫画到 his/her 收藏夹。所有这些代码都可以正常工作。

public class Comic
{
    public Comic()
    {
        UserComics = new List<UserComic>();
    }

    public int Id { get; set; }
    public string Name { get; set; }
    ...

    public List<UserComic> UserComics { get; set; }
}


public class ApplicationUser : IdentityUser
{
    public ApplicationUser()
    {
        UserComics = new List<UserComic>();
    }

    public string DisplayName { get; set; }
    ...

    public List<UserComic> UserComics { get; set; }
}
   

Many-to-many加入table

public class UserComic
{
    public string UserId { get; set; }
    public ApplicationUser User { get; set; }
    public int ComicId { get; set; }
    public Comic Comic { get; set; }
    public DateTime DateAdded { get; set; }
}

我正在苦苦挣扎的是,我希望用户能够查看通过加入 table DateAdded 字段订购的所有他喜欢的漫画。

我已经对用户 table 实施了以下查询:

var user = await _context.Users
                         .Include(c => c.UserComics)
                         .ThenInclude(c => c.Comic)
                         .FirstOrDefaultAsync(u => u.Id == UserId);

UserFavs = user.UserComics.OrderByDescending(c => c.DateAdded).ToList();

虽然这可行,但它远非完美,因为我无法在初始查询的联接 table UserComic 中找到按 DateAdded 排序的方法。另外,如果我想在以后如果用户收藏了大量漫画,我想实现分页,所有数据都已经从数据库返回,所以无论如何都没有效率。

我还在 Comics table 上实现了以下查询:

var comics = await _context.Comics
                           .Include(c => c.UserComics)
                           .ThenInclude(u => u.User)
                           .Where(c => c.UserComcis.Any(u => u.UserId == UserId))
                           .ToListAsync();

这似乎是朝着正确方向迈出的一步,但我还是无法通过连接 table DateAdded 字段进行排序,但如果需要,我可以对结果进行分页。

var comics = await _context.UserComics
                            .Where(u => u.UserId == UserId)
                           .Include(c => c.Comics)
                           .OrderByDescending(a => a.DateEnded)
                           .Select(a => a.Comics).ToListAsync();