我试图在当前返回由N:M关系产生的虚拟列表的查询上获得分页结果:
var selectedProfiles = await (from a in _context.USER_PROFILES
where a.Id == id
select a.Followers).FirstOrDefaultAsync();问题是:我尝试过不同的方法,但是没有一种方法有效,我想要存档的是:
var selectedProfiles = await (from a in _context.USER_PROFILES
where a.Id == id
select a.Followers.Skip((pageNum - 1) * pageSize).Take(pageSize))
.FirstOrDefaultAsync();显然,上面的代码不起作用,但我的目标应该很清楚。是否有任何方法可以在不查询N:M表的情况下存档此结果?DB是mariaDB的最新版本。
发布于 2020-03-02 23:13:04
听起来你想要一组给定的个人资料的分页追随者?
var followers = _context.USER_PROFILES
.Where(x => x.Id == id)
.SelectMany(x => x.Followers)
.OrderBy(x => /* Order your followers.. */)
.Skip((pageNum-1)*pageSize)
.Take(pageSize)
.ToList();在使用分页时,始终提供OrderBy/OrderByDescending条件是很重要的。
但是,如果希望用户配置文件仅包含追随者的第一页,则需要使用投影填充视图所需的内容,而不是试图传递实体。为用户配置文件返回的实体图应该总是完整的。相关实体不能被“过滤”,否则EF将如何区分以这种方式加载的部分实体和完整实体?
要获得用户配置文件/w,需要一页追随者:
var profile = _context.USER_PROFILES
.Where(x => x.Id == id)
.Select(x => new UserProfileViewModel
{
Id = x.Id,
Name = x.Name,
// Add the fields to be displayed.
Followers = x.Followers
.Select(f => new FollowerViewModel
{
Id = f.Id,
Name = f.Name,
// Add the fields to be displayed.
}).OrderBy(f => /* Order your followers.. */)
.Skip((pageNum-1)*pageSize)
.Take(pageSize)
.ToList()
}).Single();使用视图模型意味着在视图将与之交互的部分模型与实体正在跟踪的完整数据状态之间没有混淆。它还允许EF生成更高效的查询,而不是选择/序列化整个实体图。
https://stackoverflow.com/questions/60495592
复制相似问题