Linq, Skip, Orderby e SQL Server 2000
-
20-09-2019 - |
Pergunta
Estou acessando um objeto de contexto de dados gerado automaticamente usando o LINQ para SQL. O banco de dados SQL é uma caixa SQL Server 2000. A aula com a qual estou trabalhando é uma visualização SQL. Eu tenho uma declaração semelhante a isso:
query = _context.OrderDetails
.Where(w => w.Product == "TEST")
.OrderBy(o => o.DateCompleted)
.ThenBy(t => t.LineItemId)
.Skip(startRowIndex)
.Take(maximumRows);
No entanto, quando o valor do Skip é tudo menos 0, recebo este erro:
Este provedor suporta Skip () apenas sobre consultas ordenadas que retornam entidades ou projeções que contêm todas as colunas de identidade, onde a consulta é uma consulta de mesa única (não-joa), ou é uma distinta, exceto, intersect, ou união (não concat) Operação.
Eu pensaria que entre o conjunto de dados e o LineItemid que as linhas seriam únicas, mas, novamente, isso aparece. Tem a ver com isso ser uma visão? Se sim, como posso contornar esse problema?
Solução
Acredito que o que diz é que, se você não tiver uma coluna de identidade na tabela OrderDetails, precisará adicionar .Distinct () lá ou um dos outros operadores mencionados.
Outras dicas
O SQL Server 2000 possui alguns "encanamentos" ausentes que o LINQ precisa se locomover para executar funções de Skip and Tome. Isso restringe substancialmente as condições nas quais você pode usar essas funções com o SQL Server 2000.
Certifique -se de incluir a coluna de identidade em _context.OrderDetails
, e que você está cumprindo todas as outras condições, conforme declarado na mensagem de erro.
Obviamente, você sempre pode atualizar para o SQL Server 2005 ou posterior. :)
Mais informações aqui: http://msdn.microsoft.com/en-us/library/bb386988.aspx