我有一个分页 API,它返回用户请求的行,但一次只能返回这么多行,而不是整个集合。API 按设计工作,但我必须计算可用记录的总数(用于正确的页面计算)。在 API 中,我使用 Linq2Sql,并且在我最终提出请求之前,我使用 IQueryable 做了很多工作。当我去计数时,我会调用类似:totalRecordCount = queryable.Count();
生成的 SQL 仍然很有趣,但它也添加了不必要的 Order By,这使得查询非常昂贵。
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
因为我使用的是 IQueryable,所以我可以在 IQueryable 进入 SQL 服务器之前对其进行操作。
我的问题是,如果我已经有一个带有 OrderBy 的 IQueryable,是否可以在调用 Count() 之前删除该 OrderBy?
比如:totalRecordCount = 可查询。NoOrder .Count();
如果没有,没什么大不了的。我看到很多关于如何 OrderBy 的问题,但没有任何涉及从 Linq 表达式中删除 OrderBy 的问题。
谢谢!