如何将IOrderedEnumerable转换为IOrderedQueryable

时间:2013-06-20 13:48:19

标签: c# linq ienumerable iqueryable

IOrderedEnumerable上调用AsQueryable()会在IEnumerable上调用扩展方法,并返回IQueryable而不是IOrderedQueryable

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

所以我的问题有两部分:

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

  2. 您目前如何将IOrderedEnumerable转换为IOrderedQueryable

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

1 个答案:

答案 0 :(得分:6)

  1. 老实说,我无法回答这个问题。问题是在AsQueryable()接口上定义了IEnumerable,并且覆盖它可能是一个问题。您可以合理地轻松定义自己的AsOrderedQueryable()扩展名。

  2. 您必须在致电AsQueryable()后应用排序。因此new List<string>().AsQueryable().OrderBy(s => s);将返回IOrederedQueryable<string>

  3. 编辑:那么关于你原来的问题,你会写

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

    这是一个小迂回,但关系是您使用IEnumerableIOrderedEnumerable变为OrderBy,并通过IQueryable更改为IOrderedQueryable同样的方法。 IOrderedEnumerableIOrderedQueryable AFAIK之间没有直接的转换方法。