2009-07-01 4 views
0

У меня очень странная проблема.Linq Не извлекает правильные элементы в большой таблице

У меня есть таблица с более чем 800 000 записей и 2 ГБ базы данных.

Когда я пытаюсь получить последние записи:
Я получаю записи только месяц назад, последние не отображаются.

Dim Items = From Item In DB.Items _ 
      Where Item.CatID = CatID _ 
      Order By Item.PubDate Descending _ 
      Select Item Take 100 

Но если я ограничиваю выбор до последних идентификаторов, то получаю ожидаемый результат.

Dim Items = From Item In DB.Items _ 
      Where Item.CatID = CatID _ 
      And Item.ID > 600000 _ 
      Order By Item.PubDate Descending _ 
      Select Item Take 100 

Итак, что здесь происходит.
Имеет ли Linq лимит записей, которые он может запросить?

+0

Что происходит, когда вы запускаете эквивалентный запрос в SQL? Linq2Sql должен преобразовать его в нечто вроде (или включить трассировку Linq2Sql, чтобы получить точный запрос: «SELECT TOP 100 * FROM ItemsTable WHERE CatId = ORDER BY PubDate DESC« Возвращает ли запрос то, что вы ожидаете? Кроме того, просто для общей умности, убедитесь, что у вас есть указатель на CatId и PubDate (DESC), если этот запрос является общим. – Talljoe

+0

Что такое публикация 100-й записи в двух сценариях? –

+0

Возможно, мне следовало бы немного расширить этот комментарий. описание может быть вызвано другой культурой на платформе, на которой выполняется запрос, и культуре базы данных. (В случае, когда дата хранится как дата, а не галочка в db) –

ответ

0

Возможно, это могло бы сделать это:

Dim Items = From Item In DB.Items _ 
     Where Item.CatID = CatID _ 
     Order By Item.PubDate _ 
     Select Item Take 100 

Поскольку вы заказывали по Item.PubDate Descending я удалил Descending так, что вы бы первые 100 записей из самых ранних записей в соответствующих Item.PubDate поля.

+0

Нет, последние элементы имеют самый высокий PubDate, так что это не имеет значения. – InfoStatus