如何判断IQueryable是否为IOrderedQueryable?
我有一个IQueryable。 我没有在上面调用OrderBy或者用它做任何事情。
如果我做:
// for some reason, isItOrdered is always true var isItOrdered = myQueryable is IOrderedQueryable
为什么这总是如此? (看起来它不应该是。)而且,更重要的是,如何判断IQueryable是否已被订购? (即真正的IOrderedQueryable)
我希望能够做到这样的事情:
if (myQueryable is IOrderedQueryable) myQueryable = myQueryable.ThenBy(...); else myQueryable = myQueryable.OrderBy(...);
你还没有展示创建你的可查询的内容,但是它可能以某种方式自然排序?
你所得到的是检查它是否真的是一个IOrderedQueryable
– 我怀疑它只是你的查询提供者总是提供一个有序的可查询,即使顺序不明显。
编辑:好的,你可能会尝试其他的东西:
if (typeof(IOrderedQueryable).IsAssignableFrom(myQueryable.Expression.Type))
…或者通常,打印出myQueryable.Expression.Type
并查看它的外观。
这似乎有效
if (query.Expression.Type == typeof(IOrderedQueryable)) myQueryable = myQueryable.ThenBy(...); else myQueryable = myQueryable.OrderBy(...);
一些IQueryable
实现为IOrderedQueryable
重用相同的类。
除非您知道它是如何订购的,否则检查它是否真的已经订购并没有多大意义,否则当您调用ThenBy()
时,您可能会使用完全相同的属性进行排序。
另外,你不能在myQueryable
上调用Queryable.ThenBy()
,如果它是对IQueryable
的引用 – 你必须先抛出它:
if (myQueryable is IOrderedQueryable) myQueryable = ((IOrderedQueryable ) myQueryable).ThenBy(...);