Порядок элементов меняется в IQueryable, каждый раз, когда я запрашиваю с тем же условием - PullRequest
0 голосов
/ 15 декабря 2009

Я работаю над приложением ASP.NET MVC, где нам нужно написать собственный код для подкачки. И я вижу, что элементы повторяются на разных страницах. Это происходит потому, что порядок элементов в IQueryable изменяется случайным образом, и для каждой страницы приходится запрашивать базу данных. Я решил эту проблему, упорядочив элементы по дате создания, а затем по порядку, который я хотел. Но я чувствую его тяжелым. Есть ли лучший способ решить эту проблему.

Ответы [ 3 ]

1 голос
/ 15 декабря 2009

Нет, это правильный путь. База данных может возвращать строки в недетерминированном порядке, если вы не скажете, чтобы они упорядочились по чему-либо.

1 голос
/ 15 декабря 2009

Если вы выбираете строки из базы данных через IQuerable и упорядочиваете их по одному столбцу, если в этом столбце есть строки с одинаковым значением, порядок этих строк может отличаться, вам нужно сделать то же, что и сейчас, то есть по двум столбцам: сначала тот, который вас действительно интересует, а затем второй (например, дата), не должно быть такого большого снижения производительности, поскольку сортировка выполняется в базе данных.

Но что нужно сделать, так это указать порядок:

  Context.Products
   .Where(p => p.ProductID > 100)
   .OrderBy(p => p.CategoryID)
    .ThenBy(p => p.Date).ToList();

Обратите внимание на ThenBy, который сгенерирует правильный SQL.

0 голосов
/ 15 декабря 2009

Взгляните на: http://srtsolutions.com/blogs/billwagner/archive/2006/10/14/paging-output-with-linq2sql.aspx Билла Вагнера.

Он использует Take () и Skip () для создания постраничного вывода.

...