エンティティデータモデルを介して、約2,000万のエントリを持つMSSQLデータベースのテーブルからすべてのレコードをフェッチしようとしています。私の最初のアイデアは、次のようにデータをチャンクで取得することでした。
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クエリを処理するための最良のアプローチは何ですか?