簡體   English   中英

如何使用C#和實體框架實現SQL Server分頁?

[英]How to implement SQL Server paging using C# and entity framework?

我必須使用實體框架用大約150,000條記錄更新Sql Server表中的每一行。 為了減少服務器的點擊次數,我想分批執行,每行1000行。 我需要實體框架來:

  1. 從數據庫中選擇前1000行。
  2. 更新這些行。
  3. 調用SaveChanges()方法。
  4. 獲取下一個1000行。
  5. 重復。

什么是實現這一目標的最佳方法?

我正在使用實體框架4和SQL Server 2012。

使用LINQ SkipTake

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結果(將進行異步處理)。

這樣的事情應該工作:

int skip =0;
int take = 1000;
for (int i = 0; i < 150; i++)
{
var rows = (from x in Context.Table
            select x).OrderBy(x => x.id).Skip(skip).Take(take).ToList();

//do some update stuff with rows

skip += 1000;
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM