我試圖通過實體數據模型從大約2000萬條目的MS SQL數據庫中的表中提取每條記錄。我最初的想法是檢索塊中的數據,就像這樣:使用LINQ處理大型SQL查詢
public IEnumerable<IEnumerable<device>> GetDevicesInChunks(int chunkSize)
{
using (var db = new AccountsEntities())
{
for (int i = 0; i < db.devices.Count(); i += chunkSize)
{
yield return db.devices.Skip(i).Take(chunkSize);
}
}
}
然而,看來我必須調用OrderBy
我叫Skip
之前,由當我採用上述方法時拋出的異常判斷
The method 'Skip' is only supported for sorted input in LINQ to Entities. The method
'OrderBy' must be called before the method 'Skip'.
對於我檢索的每個記錄子集,我確定致電OrderBy
將是昂貴的,因爲設備沒有特定的順序 - 我覺得我在這裏走錯了路。
通過LINQ處理大型SQL查詢的最佳方法是什麼?
你不能使用'Where'並用主鍵而不是'Skip'來過濾嗎?或者只是'OrderBy'的主鍵? – 2013-03-06 23:53:15
有什麼特別的原因讓你必須以大塊的方式做到這一點? – Tory 2013-03-06 23:56:55
@Tory我認爲一次加載2000萬個實體會是足夠的理由。 – 2013-03-07 00:04:57