LINQ, Skip, OrderBy и SQL Server 2000 - PullRequest
2 голосов
/ 17 ноября 2009

Я обращаюсь к объекту контекста данных, который автоматически генерируется с помощью 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 () только для упорядоченных запросов, возвращающих сущности или проекции, которые содержат все столбцы идентификаторов, где запрос является запросом с одной таблицей (без объединения) или является отдельным, кроме, пересекающимся, или операция объединения (не Concat).

Я думаю, что между DateCompleted и LineItemId строки будут уникальными, но с другой стороны, это всплывает. Связано ли это с тем, что это вид? Если так, как я могу обойти эту проблему?

Ответы [ 2 ]

4 голосов
/ 17 ноября 2009

В SQL Server 2000 отсутствует некоторая «сантехника», которую Linq должен обойти для выполнения функций Skip и Take. Это существенно ограничивает условия, в которых вы можете использовать эти функции с SQL Server 2000.

Убедитесь, что вы включили столбец Identity в _context.OrderDetails и выполнили все другие условия, указанные в сообщении об ошибке.

Конечно, вы всегда можете выполнить обновление до SQL Server 2005 или более поздней версии. :)

Подробнее здесь: http://msdn.microsoft.com/en-us/library/bb386988.aspx

2 голосов
/ 17 ноября 2009

Я считаю, что это говорит о том, что если у вас нет столбца идентификаторов в таблице OrderDetails, вам нужно добавить туда .Distinct () или один из упомянутых других операторов.

...