c# – 从IQueryable中删除OrderBy

c# – 从IQueryable中删除OrderBy,第1张

概述我有一个分页API返回一个用户请求的行,但一次只有这么多,而不是整个集合. API按照设计工作,但我必须计算可用记录的总数(适用于页面计算).在API中,我使用 Linq2Sql,我在IQueryable之前做了很多工作,然后才能终止我的请求.当我去获得计数,我调用如下:totalRecordCount = queryable.Count(); 生成的SQL是有趣的,但它也增加了一个不必要的Ord 我有一个分页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 Server.

我的问题是,如果我已经有一个有OrderBy的Iqueryable,可以在调用Count()之前删除该OrderBy吗?

像:totalRecordCount = queryable.NoOrder.Count();

如果没有,没有biggIE.我看到很多问题如何OrderBy,但不是任何涉及从linq表达式中删除OrderBy.

谢谢!

解决方法 不仅仅是一个不需要的ORDER BY,还有一个虚假的top(1).
SELECT top (1) NulL AS [EMPTY] ...

该子选择只返回0或1行.实际上没有top,在子选中有一个ORDER BY是不合法的.

The ORDER BY clause is invalID in vIEws,inline functions,derived tables,subquerIEs,and common table Expressions,unless top or FOR XML is also specifIEd.: SELECT COUNT(*) FROM ( SELECT * FROM table1 ORDER BY foo )

sqlfiddle

我想你可能在你的liNQ做错了.你确定你没有写过.在调用.Count()之前,在查询中的某个地方找到(1)或类似的东西?

这是错的:

Iqueryable<Foo> foo = (...).OrderBy(x => x.Foo).Take(1);int count = foo.Count();

你应该这样做:

Iqueryable<Foo> foo = (...);Iqueryable<Foo> topOne = foo.OrderBy(x => x.Foo).Take(1);int count = foo.Count();
总结

以上是内存溢出为你收集整理的c# – 从IQueryable中删除OrderBy全部内容,希望文章能够帮你解决c# – 从IQueryable中删除OrderBy所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1263648.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-08
下一篇 2022-06-08

发表评论

登录后才能评论

评论列表(0条)

保存