J'ai une API de pagination qui renvoie les lignes demandées par un utilisateur, mais seulement en même temps, et non pas la totalité de la collection. L'API fonctionne comme prévu, mais je dois calculer le nombre total d'enregistrements disponibles (pour les calculs de page appropriés). Dans l'API, j'utilise Linq2Sql et je travaille beaucoup avec le IQueryable avant de faire mes demandes. Quand je vais obtenir le compte, j'appelle quelque chose comme: totalRecordCount = queryable.Count();Supprimer OrderBy à partir d'un IQueryable <T>
Le SQL qui en résulte n'en est pas moins intéressant, mais il ajoute également un ordre inutile qui rend la requête très coûteuse.
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
Parce que je suis en utilisant le IQueryable, je peux manipuler le IQueryable avant qu'il fait sur le serveur SQL.
Ma question est, si j'ai déjà un IQueryable avec un OrderBy, est-il possible de supprimer ce OrderBy avant d'appeler le Count()?
comme: totalRecordCount = interrogeable. NoOrder .Count();
Sinon, pas de biggie. Je vois beaucoup de questions sur OrderBy, mais pas sur la suppression d'une OrderBy de l'expression Linq.
Merci!
Pouvez-vous poster plus de votre code? En particulier, je suis intéressé par le code de la requête que vous avez assigné à 'queryable'. –
vous pouvez toujours analyser l'arbre d'expression, puis supprimer le orderby à partir de là – dbarnes