订单查询结果 many-to-many 加入 table
Order query results in a many-to-many join table
我正在使用 Razor Pages 和 Entity Framework Core 在 .NET Core 3.1 中编写网站代码。我有以下两个 tables,Comics
和 ApplicationUser
(自定义字段添加到 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();
我正在使用 Razor Pages 和 Entity Framework Core 在 .NET Core 3.1 中编写网站代码。我有以下两个 tables,Comics
和 ApplicationUser
(自定义字段添加到 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();