我正在处理管理视图,该视图列出了ASP.NET身份用户以及创建新用户的链接。现在,该链接只是带你到一个新的页面,并创建一个新用户的表单。保存新用户后,它会将您发送回用户列表页面。列表页面已经接受pageNumber和pageSize参数(其中pageSize是一次检索和显示的用户数量)。我想要做的是显示包含刚刚创建的用户的页面,但是如何确定哪个页面该用户落在?使用实体框架获取包含特定记录的分页结果
我需要知道该用户在所有用户的集合中的索引,但我不想检索所有用户来执行此操作。有没有办法让Entity Framework从本质上返回Row_Number()呢。我的具体记录?否则,我觉得我只需要创建一个存储过程给我的索引,但我可以用代码优先的身份数据库(我是新的代码优先和身份证)。
编辑: 请求的代码摘录(修改为简洁起见):
public ActionResult Users(int? pageNum, int? pageSize)
{
ActionResult response;
AccountAdminUsersVM vm = new AccountAdminUsersVM();
vm.PageSize = pageSize ?? 50;
vm.CurrentPage = pageNum ?? 1;
try
{
int totalCount;
vm.UsersPage = GetUsers(vm.CurrentPage, vm.PageSize, out totalCount);
vm.TotalCount = totalCount;
...
response = View(vm);
}
catch (Exception ex)
{
...
}
return response;
}
private List<ApplicationUser> GetUsers(int page, int pageSize, out int totalCount)
{
totalCount = UserManager.Users.Count();
return UserManager.Users
.OrderBy(u => u.UserName)
.Skip((page - 1) * pageSize)
.Take(pageSize)
.ToList();
}
private ApplicationUserManager UserManager
{
get
{
return HttpContext.GetOwinContext().GetUserManager<ApplicationUserManager>();
}
}
这就是我想象中的SQL需要看起来像(除列的顺序将需要太多参数):
SELECT t1.RowNum
FROM (
SELECT Id, ROW_NUMBER() OVER(ORDER BY UserName) AS RowNum
FROM AspNetUsers
) t1
WHERE t1.Id = @Id
这似乎是Linq的一个高难度订单。
不会将它添加为最后一条记录(或者您是否在分页结果中进行一些排序)? –
他们将按某些财产/专栏排序。目前它是用户名。 – xr280xr
获得'行号'将无济于事。您需要获取排序后集合中新对象的索引 –