在IOrderedEnumerable
上调用AsQueryable()会在IEnumerable
上调用扩展方法,并返回IQueryable
而不是IOrderedQueryable
。
这对我来说没有意义。我想在AsQueryable
上应该有一个IOrderedEnumerable
扩展方法,返回IOrderedQueryable
。
所以我的问题有两部分:
是否应该有public static IOrderedQueryable<TElement> AsQueryable<TElement>(this IOrderedEnumerable<TElement> source)
扩展方法?如果没有,为什么?
您目前如何将IOrderedEnumerable
转换为IOrderedQueryable
?
IOrderedEnumerable<string> orderedEnumerable = new List<string>().OrderBy(s => s);
IOrderedQueryable<string> orderedQueryable = // how can I convert orderedEnumerable here?
答案 0 :(得分:6)
老实说,我无法回答这个问题。问题是在AsQueryable()
接口上定义了IEnumerable
,并且覆盖它可能是一个问题。您可以合理地轻松定义自己的AsOrderedQueryable()
扩展名。
您必须在致电AsQueryable()
后应用排序。因此new List<string>().AsQueryable().OrderBy(s => s);
将返回IOrederedQueryable<string>
。
编辑:那么关于你原来的问题,你会写
IOrderedQueryable<string> orderedQueryable = orderedEnumerable.AsQueryable().OrderBy(s => s);
这是一个小迂回,但关系是您使用IEnumerable
将IOrderedEnumerable
变为OrderBy
,并通过IQueryable
更改为IOrderedQueryable
同样的方法。 IOrderedEnumerable
和IOrderedQueryable
AFAIK之间没有直接的转换方法。