通常将IOueryable转换为IOrderedQueryable

Too*_*eey 9 c# linq-to-entities entity-framework

我有一个通用的方法,我拿一个IQueryable<T>IOrderedQuerable<T>使用Linq-to-Entities 返回一个.

一个简单的input.OrderBy(p => p.something)将无法工作,因为我不知道任何属性T(我不能将此约束到接口).

将结果转换为(IOrderedQuerable<T>)似乎工作,直到您尝试实际使用它与.Skip().Take(),此时您会收到运行时错误.

我想我理论上可以使用反射,看看我是否找到了一个int或者什么,并构建一个表达式用作排序,但这看起来很脏.

有任何想法吗?

ReP*_*rre 14

input.OrderBy(p => 0);
Run Code Online (Sandbox Code Playgroud)

这样您就可以按照最初的顺序排列项目.但是,这将耗费额外的CPU.

  • @RePierre:例如,请参阅http://stackoverflow.com/a/2700184/116614.有很多原因,例如页面重新排列,优化,当前I/O活动,当前缓存数据,从表中创建/删除索引等.点是,你不应该依赖数据库中行的默认顺序,因为它是未定义且数据库供应商没有签订合同以保证稳定的订单. (3认同)