我有一个分页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,所以我可以在它到达SQL服务器之前操作IQueryable。
我的问题是,如果我已经有一个带OrderBy的IQueryable,能否在调用Count()之前删除该OrderBy?
例如:totalRecordCount = queryable.NoOrder.Count();
如果不能,也没关系。 我看到很多关于如何OrderBy的问题,但没有涉及从Linq表达式中删除OrderBy的。
谢谢!
queryable
的查询代码感兴趣。 - Mark Byers