我想使用Entity Framework 6从表中的大量记录中获取记录的行号。
我试过这段代码:
//var currentUser = my record
var orderedUsers = dbContext.User.OrderByDescending(u => u.Age).ToList();
var userIndex = orderedUsers.IndexOf(currentUser);
ToList()
方法因超时而崩溃,因为我假设此方法将整个列表加载到内存中。
如何使用Linq更简单的方法获取此行号(因此,没有ToList
或将所有内容安装在内存中)?
有关信息,我的目标是从起始索引到另一个索引获取一系列记录。这是我写的代码:
var result = orderedUsers.Skip(userIndex).Take(30).ToList();
由于
答案 0 :(得分:5)
使用Select
的形式,它使用索引参数和实体获取lambda:
int index = dbContext
.User
.OrderByDescending(u => u.Age)
.Select((user, index) => new {user, index})
.First(x => x.user == currentUser)
.index;
我的目标是从起始索引到另一个索引
获取一系列记录
因此,如果你想在没有达到特定记录时跳过,为什么不这样做呢:
dbContext
.User
.SkipWhile(x => x != currentUser)
.Take(30);
答案 1 :(得分:0)
一种简单的方法可能是将页码存储在一个整数中,然后进行乘法运算。
public List<User> GetUsers(int pageNumber = 0) //pageNumber is the page you are on
{
int itemsPerPage = 30;
var orderedUsers = dbContext.User.OrderByDescending(u => u.Age)
.Skip(itemsPerPage * pageNumber)
.Take(itemsPerPage).ToList();
return orderedUsers;
}