Я пытаюсь получить каждую запись из таблицы в базе данных MS SQL с примерно 20 миллионами записей через модель данных сущности. Моя первоначальная идея состояла в том, чтобы получить данные в кусках, например, так:Обработка больших SQL-запросов с помощью LINQ
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
на каждом подмножестве записей, которые я получаю, будет дорого, так как устройства не имеют особого порядка - я чувствую, что я иду по неправильному пути здесь.
Каков наилучший подход к обработке больших SQL-запросов через LINQ?
Можете ли вы не использовать 'Where' и фильтровать первичный ключ вместо' Skip'? Или просто 'OrderBy' первичный ключ? –
Есть ли какая-то особая причина, почему вы должны делать это в кусках? – Tory
@Tory Я думаю, что загрузка 20 миллионов объектов сразу была бы достаточной причиной. –