Вопрос

Я обращаюсь к объекту контекста данных, который автоматически генерируется с помощью 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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top