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?

Foi útil?

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

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top