【发布时间】:2018-03-09 14:32:25
【问题描述】:
我正在开发一个管理视图,该视图列出了 ASP.NET 身份用户以及用于创建新用户的链接。现在,该链接只是将您带到一个带有用于创建新用户的表单的新页面。保存新用户后,它会将您送回用户列表页面。列表页面已经接受 pageNumber 和 pageSize 参数(其中 pageSize 是一次检索和显示的用户数。)我想要做的是显示包含刚刚创建的用户的页面,但是我如何确定哪个页面那个用户落在?
我需要知道该用户在所有用户集中的索引,但我不想检索所有用户来执行此操作。有没有办法让实体框架基本上返回 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 来说似乎是一项艰巨的任务。
【问题讨论】:
-
不会作为最后一条记录添加(或者您是否在分页结果中进行一些排序)?
-
它们将按某些属性/列排序。目前是用户名。
-
获取“行号”无济于事。需要获取排序集合中新对象的索引
标签: c# asp.net sql-server entity-framework pagination