【发布时间】:2012-05-22 09:22:39
【问题描述】:
我有一个分页 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?
like: totalRecordCount = queryable.NoOrder.Count();
如果不是,那也没什么大不了的。我看到很多关于如何 OrderBy 的问题,但没有任何涉及从 Linq 表达式中删除 OrderBy 的问题。
谢谢!
【问题讨论】:
-
你能发布更多你的代码吗?特别是我对您分配给
queryable的查询代码感兴趣。 -
你总是可以解析表达式树然后从那里删除 orderby
标签: c# .net linq linq-to-sql iqueryable