Ho un'API di paging che restituisce le righe richieste dell'utente, ma solo tante in una volta, non l'intera raccolta. L'API funziona come progettato, ma devo calcolare il numero totale di record disponibili (per calcoli di pagina corretti). All'interno dell'API, io uso Linq2Sql e lavoro molto con IQueryable prima di poter finalmente effettuare le mie richieste. Quando vado a prendere il conteggio, chiamo qualcosa come: totalRecordCount = queryable.Count();Rimuovi ordine da un IQueryable <T>
L'SQL risultante è comunque interessante, ma aggiunge anche un ordine non necessario che rende la query molto costosa.
exec sp_executesql N'SELECT COUNT(*) AS [value]
FROM (
SELECT TOP (1) NULL AS [EMPTY]
FROM [dbo].[JournalEventsView] AS [t0]
WHERE [t0].[DataOwnerID] = @p0
ORDER BY [t0].[DataTimeStamp] DESC
) AS [t1]',N'@p0 int',@p0=1
perché sto usando l'IQueryable, posso manipolare l'IQueryable prima di esso che lo rende al server SQL.
La mia domanda è, se ho già un IQueryable con un OrderBy in esso, è possibile rimuovere quel OrderBy prima che chiamo il conteggio()?
come: totalRecordCount = queryable. NoOrder .Count();
In caso contrario, nessun problema. Vedo molte domande su OrderBy, ma non tutte le operazioni che comportano la rimozione di un OrderBy dall'espressione Linq.
Grazie!
Puoi pubblicare altro codice? In particolare, mi interessa il codice per la query che hai assegnato a 'queryable'. –
si può sempre analizzare l'albero delle espressioni e quindi rimuovere l'ordine da lì – dbarnes