我正在尝试通过实体数据模型从具有大约 2000 万个条目的 MS 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 查询的最佳方法是什么?