我有一台IQueryable。我没有对它调用OrderBy,也没有用它做任何事情。
如果我这样做了:
// for some reason, isItOrdered is always true
var isItOrdered = myQueryable is IOrderedQueryable<T>为什么这总是正确的?(看起来不应该是这样的。)而且,更重要的是,我如何判断是否已经订购了IQueryable?(即真正的IOrderedQueryable)
我希望能够做到以下几点:
if (myQueryable is IOrderedQueryable<T>)
myQueryable = myQueryable.ThenBy(...);
else
myQueryable = myQueryable.OrderBy(...);发布于 2011-02-22 05:26:14
你一开始还没有展示是什么在创建你的queryable,但也许它是以某种方式自然排序的?
您所得到的确实会检查它是否真的是一个IOrderedQueryable<T> --我怀疑只是您的查询提供程序总是提供一个有序的可查询对象,即使顺序并不明显。
编辑:好的,你可以尝试一些其他的东西:
if (typeof(IOrderedQueryable<T>).IsAssignableFrom(myQueryable.Expression.Type))..。或者一般情况下,将myQueryable.Expression.Type打印出来,看看它是什么样子。
发布于 2014-02-25 19:32:41
这似乎行得通
if (query.Expression.Type == typeof(IOrderedQueryable<T>))
myQueryable = myQueryable.ThenBy(...);
else
myQueryable = myQueryable.OrderBy(...);发布于 2011-02-22 05:28:54
一些IQueryable实现为IOrderedQueryable<T>重用了相同的类。
检查它是否真的已经排序没有多大意义,除非您知道它是如何排序的,否则当您调用ThenBy()时,您可能会按完全相同的属性排序。
此外,如果是对IQueryable的引用,则不能在myQueryable上调用Queryable.ThenBy(),必须先强制转换它:
if (myQueryable is IOrderedQueryable<T>)
myQueryable = ((IOrderedQueryable<T>) myQueryable).ThenBy(...);https://stackoverflow.com/questions/5071426
复制相似问题