2016-10-28 17 views
1

Я использую Entity Framework для запроса базы данных и я использую следующие:IQueryable.Skip И IQueryable.Take Верхняя граница

context 
    .MyTable 
    .Where(...) 
    .Where(...) 
    .OrderBy(...) 
    .Skip((int)numberOfItemsToSkip) 
    .Take((int)numberOfItemsToTake) 
    .ToArray(); 

Мой вопрос о той части Skip((int)numberOfItemsToSkip). Он принимает только аргумент Int32, который имеет верхнюю границу Int32.MaxValue. Теперь, что, если MyTable содержит более Int32.MaxValue записей. Причина, по которой я говорю, заключается в том, что база данных у меня ОГРОМНАЯ и значительно растет, и именно поэтому я столкнулся с тем, что Int32.MaxValue может быть недостаточно. Моя база данных размещена на SQL Server.

Итак, есть ли какой-либо встроенный способ передать аргумент Int64? Я могу идти вперед и делать что-то вручную, но мой вопрос о чем-то изнутри Entity Framework.

+1

Итак, у вас есть набор результатов нумерации в миллиарды строк, и вы считаете, что это разумный случай использования людей для подкачки через все эти строки? Как правило, ожидается, что другая фильтрация уменьшит количество результатов до «человеческих» уровней, так что пейджинг имеет смысл или вы не будете использовать стиль поискового вызова доступа к данным. –

ответ

1

Вы можете попробовать повторить Skip несколько раз:

context 
    .MyTable 
    .Where(...) 
    .Where(...) 
    .OrderBy(...)//you forgot it 
    .Skip(numberOfItemsToSkip1) 
    .Skip(numberOfItemsToSkip2) 
    .Take(numberOfItemsToTake) 
    .ToArray(); 

Привели SQL (EF 6.1.3 SQL Server 2012):

SELECT * 
    FROM [dbo].[Table] 
    WHERE .... 
    ORDER BY ... 
    OFFSET numberOfItemsToSkip1 + numberOfItemsToSkip2 ROWS FETCH NEXT numberOfItemsToTake ROWS ONLY 
+0

Каков эффект этого в отношении SQL-запроса, создаваемого Entity Framework? –

+0

Я пробовал это на SQL Server 2008 R2 с EF 6.0, и он сгенерировал это: WHERE [Extent1]. [Row_number]> (numberOfItemsToSkip1 + numberOfItemsToSkip2) –

+0

В моем случае - другой результат: 'OFFSET' и' FETCH NEXT' –

Смежные вопросы