生成的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所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)