首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何判断IQueryable是否是IOrderedQueryable?

如何判断IQueryable是否是IOrderedQueryable?
EN

Stack Overflow用户
提问于 2011-02-22 05:22:39
回答 3查看 3.3K关注 0票数 13

我有一台IQueryable。我没有对它调用OrderBy,也没有用它做任何事情。

如果我这样做了:

代码语言:javascript
复制
// for some reason, isItOrdered is always true
var isItOrdered = myQueryable is IOrderedQueryable<T>

为什么这总是正确的?(看起来不应该是这样的。)而且,更重要的是,我如何判断是否已经订购了IQueryable?(即真正的IOrderedQueryable)

我希望能够做到以下几点:

代码语言:javascript
复制
if (myQueryable is IOrderedQueryable<T>)
  myQueryable = myQueryable.ThenBy(...);
else
  myQueryable = myQueryable.OrderBy(...);
EN

回答 3

Stack Overflow用户

发布于 2011-02-22 05:26:14

你一开始还没有展示是什么在创建你的queryable,但也许它是以某种方式自然排序的?

您所得到的确实会检查它是否真的是一个IOrderedQueryable<T> --我怀疑只是您的查询提供程序总是提供一个有序的可查询对象,即使顺序并不明显。

编辑:好的,你可以尝试一些其他的东西:

代码语言:javascript
复制
if (typeof(IOrderedQueryable<T>).IsAssignableFrom(myQueryable.Expression.Type))

..。或者一般情况下,将myQueryable.Expression.Type打印出来,看看它是什么样子。

票数 14
EN

Stack Overflow用户

发布于 2014-02-25 19:32:41

这似乎行得通

代码语言:javascript
复制
if (query.Expression.Type == typeof(IOrderedQueryable<T>))
    myQueryable = myQueryable.ThenBy(...);
else
    myQueryable = myQueryable.OrderBy(...);
票数 7
EN

Stack Overflow用户

发布于 2011-02-22 05:28:54

一些IQueryable实现为IOrderedQueryable<T>重用了相同的类。

检查它是否真的已经排序没有多大意义,除非您知道它是如何排序的,否则当您调用ThenBy()时,您可能会按完全相同的属性排序。

此外,如果是对IQueryable的引用,则不能在myQueryable上调用Queryable.ThenBy(),必须先强制转换它:

代码语言:javascript
复制
if (myQueryable is IOrderedQueryable<T>)
   myQueryable = ((IOrderedQueryable<T>) myQueryable).ThenBy(...);
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5071426

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档