LINQ, Skip, OrderBy, e SQL Server 2000
-
20-09-2019 - |
Domanda
Sono l'accesso a un oggetto di contesto dati che è auto-generato utilizzando LINQ to SQL. Il database SQL è un 2000 di dialogo SQL Server. La classe sto lavorando con una vista SQL. Ho una dichiarazione che è simile a questo:
query = _context.OrderDetails
.Where(w => w.Product == "TEST")
.OrderBy(o => o.DateCompleted)
.ThenBy(t => t.LineItemId)
.Skip(startRowIndex)
.Take(maximumRows);
Tuttavia, quando il valore di Skip è tutt'altro 0, ottengo questo errore:
Questo provider supporta Skip () solo tramite ordinato query che restituiscono entità o proiezioni che contengono tutte le colonne di identità, in cui la query è un tavolo singolo (non-join) query o è un distinto, Salvo, Intersect, o il funzionamento dell'Unione (non Concat).
mi piacerebbe pensare che tra il teh DateCompleted e LineItemId che le righe sarebbe unico, ma poi di nuovo questo si apre. Ha a che fare con questo essere un punto di vista? Se sì, come posso aggirare questo problema?
Soluzione
Credo che ciò che dice è che se non si dispone di una colonna di identità sul tavolo OrderDetails allora avete bisogno di aggiungere .Distinct () in là o uno degli altri operatori menzionati.
Altri suggerimenti
SQL Server 2000 ha una certa "idraulico" mancante che Linq ha per andare in giro in modo da eseguire Skip e Take funzioni. Questo limita notevolmente le condizioni in cui è possibile utilizzare queste funzioni con SQL Server 2000.
Assicurarsi che si sta inclusa la colonna di identità in _context.OrderDetails
, e che si sono che soddisfi tutte le altre condizioni, come indicato nel messaggio di errore.
Naturalmente, è sempre possibile aggiornare a SQL Server 2005 o versioni successive. :)
Più informazioni su: http://msdn.microsoft.com/en -us / library / bb386988.aspx