c# - 如何使用C#和 Entity Framework 实现SQL Server分页?

标签 c# sql-server entity-framework entity-framework-4

我必须使用 Entity Framework 更新包含大约 150,000 条记录的 Sql Server 表中的每一行。为了减少服务器的点击量,我想在 1000 行的单独批处理中执行此操作。我需要 Entity Framework 来:

  1. 从数据库中选择前 1000 行。
  2. 更新这些行。
  3. 调用 SaveChanges() 方法。
  4. 获取接下来的 1000 行。
  5. 重复。

实现此目标的最佳方法是什么?

我正在使用 Entity Framework 4 和 SQL Server 2012。

最佳答案

使用LINQ Skip & Take :

return query.Skip(HOW MUCH TO SKIP -AT THE BEGINNING WILL BE ZERO-)
    .Take(HOW MUCH TO TAKE -THE NUMBER OF YOUR PAGING SIZE-).ToList();

如果你想在一个循环中完成它,你可以这样做:

int pagingIncrement = 1000;
for (int i = 0; i <= 150 000; i=i+pagingIncrement)
{
    var query = your actual LINQ query.
    var results = query.Skip(i).Take(pagingIncrement);

    UpdatePartialResults(results);
}

注意:重要的是,在更新这些行时,您不要在实际的 LINQ 查询中更新 ORDER BY 的条件,否则您最终可能会一次又一次地更新相同的结果(因为重新排序)。

其他想法是用一些先前给出的想法扩展 IEnumerable 迭代器,例如 Skip(counter).Take(pagingSize 和 yield result(有点异步处理)。

关于c# - 如何使用C#和 Entity Framework 实现SQL Server分页?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12412144/

相关文章:

c# - EF Code First 导航属性到同一个表

c# - 为什么我的 View 不使用 EditorTemplates 文件夹来执行创建操作?

c# - Silverlight数据网格: Highlight an entire column when that column is sorted

c# - 如何在 UWP 中通过多个页面传递对象

c# - 将枚举写入 csv 文件

sql - T-SQL 相当于 =rand()

sql-server - 从给定表动态构建外键图查询

sql-server - 加入群组中的最大日期记录

entity-framework - Entity Framework - 避免序列化中的循环关系

c# - 在 Windows 上将数据插入文件