4

在 an 上调用AsQueryable() 会IOrderedEnumerable调用扩展方法 onIEnumerable并返回一个IQueryable而不是IOrderedQueryable.

这对我来说真的没有意义。我想应该有一个AsQueryable扩展方法IOrderedEnumerable返回IOrderedQueryable

所以我的问题有两个部分:

  1. 应该有public static IOrderedQueryable<TElement> AsQueryable<TElement>(this IOrderedEnumerable<TElement> source)扩展方法吗?如果不是,为什么?

  2. 您目前如何将 a 转换IOrderedEnumerableIOrderedQueryable

    IOrderedEnumerable<string> orderedEnumerable = new List<string>().OrderBy(s => s);
    
    IOrderedQueryable<string> orderedQueryable = // how can I convert orderedEnumerable here?
    
4

1 回答 1

8
  1. 老实说,我无法回答这个问题。问题是AsQueryable()在接口上定义的IEnumerable,覆盖它可能是一个问题。您可能可以AsOrderedQueryable()相当容易地定义自己的扩展。

  2. 您必须在调用后应用排序AsQueryable()。所以new List<string>().AsQueryable().OrderBy(s => s);会返回一个IOrederedQueryable<string>.

编辑:所以关于你原来的问题,你会写

IOrderedQueryable<string> orderedQueryable = orderedEnumerable.AsQueryable().OrderBy(s => s);

这有点迂回,但关系是你把 anIEnumerable变成了IOrderedEnumerableusing OrderBy,然后你通过同样的方法IQueryable变成了。和AFAIKIOrderedQueryable之间不存在直接的转换方法。IOrderedEnumerableIOrderedQueryable

于 2013-06-20T13:58:34.390 回答