Pregunta

Estoy acceder a un objeto de contexto de datos que se genera automáticamente mediante el uso de LINQ a SQL. La base de datos SQL es un cuadro de SQL Server 2000. La clase que estoy trabajando es una vista SQL. Tengo una declaración que es similar al siguiente:

query = _context.OrderDetails
    .Where(w => w.Product == "TEST")
    .OrderBy(o => o.DateCompleted)
    .ThenBy(t => t.LineItemId)
    .Skip(startRowIndex) 
    .Take(maximumRows);

Sin embargo, cuando el valor de Saltar es todo menos 0, me sale este error:

Este proveedor admite Skip () sólo sobre ordenó consultas que devuelven entidades o proyecciones que contienen todas las columnas de identidad, donde la consulta es de una sola tabla (no unirse a-) consulta o una clara, Excepto, Intersección, o Unión (no de concatenación) operación.

Me parece que entre teh DateCompleted y lineItemId que las filas serían únicas, pero de nuevo esto aparece. ¿Tiene que ver con esto de ser un punto de vista? Si es así, ¿cómo puedo evitar este problema?

¿Fue útil?

Solución

Creo que lo que dice es que si usted no tiene una columna de identidad en la mesa OrderDetails continuación, es necesario añadir .Distinct () en allí o uno de los otros operadores mencionados.

Otros consejos

SQL Server 2000 tiene algunos desaparecidos "cañerías" LINQ que tiene que moverse con el fin de realizar Skip y Take funciones. Esto restringe sustancialmente las condiciones en las que se pueden utilizar estas funciones con SQL Server 2000.

Asegúrese de que está incluida la columna de identidad en _context.OrderDetails, y que están cumpliendo todas las otras condiciones como se indica en el mensaje de error.

Por supuesto, siempre se puede actualizar a SQL Server 2005 o posterior. :)

Más información aquí: http://msdn.microsoft.com/en -us / biblioteca / bb386988.aspx

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top