使用Linq获取记录的行号

时间:2015-10-05 16:01:15

标签: c# entity-framework linq

我想使用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();

由于

2 个答案:

答案 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;
}