LINQ, Skip, OrderBy и SQL Server 2000
-
20-09-2019 - |
Вопрос
Я обращаюсь к объекту контекста данных, который автоматически генерируется с помощью LINQ to SQL.База данных SQL представляет собой блок SQL Server 2000.Класс, с которым я работаю, - это представление SQL.У меня есть утверждение, похожее на это:
query = _context.OrderDetails
.Where(w => w.Product == "TEST")
.OrderBy(o => o.DateCompleted)
.ThenBy(t => t.LineItemId)
.Skip(startRowIndex)
.Take(maximumRows);
Однако, когда значение Skip равно чему угодно, кроме 0, я получаю эту ошибку:
Этот поставщик поддерживает Skip() только для упорядоченных запросов, возвращающих объекты или проекции, которые содержат все столбцы идентификаторов, где запрос представляет собой запрос с одной таблицей (без объединения) или является отдельной операцией Except, Intersect или Union (не Concat).
Я бы подумал, что между DateCompleted и LineItemId строки будут уникальными, но затем снова появляется это.Имеет ли это отношение к тому, что это представление?Если да, то как я могу обойти эту проблему?
Решение
Я полагаю, что это говорит о том, что если у вас нет столбца identity в таблице OrderDetails, то вам нужно добавить .Distinct() там или один из других упомянутых операторов.
Другие советы
В SQL Server 2000 отсутствует некоторая "сантехника", которую Linq должен обойти, чтобы выполнять функции Skip и Take.Это существенно ограничивает условия, в которых вы можете использовать эти функции с SQL Server 2000.
Убедитесь, что вы включили столбец Identity в _context.OrderDetails
, и что вы выполняете все остальные условия, как указано в сообщении об ошибке.
Конечно, вы всегда можете перейти на SQL Server 2005 или более позднюю версию.:)
Более подробная информация здесь: http://msdn.microsoft.com/en-us/library/bb386988.aspx