【问题标题】:How to convert IOrderedEnumerable to IOrderedQueryable如何将 IOrderedEnumerable 转换为 IOrderedQueryable
【发布时间】:2013-06-20 13:48:19
【问题描述】:

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

这对我来说真的没有意义。我想在IOrderedEnumerable 上应该有一个AsQueryable 扩展方法返回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?
    

【问题讨论】:

    标签: c# linq ienumerable iqueryable


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

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

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

    IOrderedQueryable&lt;string&gt; orderedQueryable = orderedEnumerable.AsQueryable().OrderBy(s =&gt; s);

    有点迂回,但关系是您使用OrderByIEnumerable 转换为IOrderedEnumerable,并通过相同的方法将IQueryable 更改为IOrderedQueryableIOrderedEnumerableIOrderedQueryable AFAIK 之间不存在直接的转换方法。

    【讨论】:

    • “覆盖它可能是一个问题”......我认为不会。 IQueryable 派生自 IEnumerable,两者都实现了许多同名的扩展方法。
    • @ZaidMasud 它没有实现自己的,它继承了它们。 msdn.microsoft.com/en-us/library/system.linq.iqueryable.aspx
    • 我的意思是IEnumerable 有一个Where 扩展方法,IQueryable 也有一个Where 扩展方法。而IQueryable 继承自IEnumerable,就像IOrderedEnumerable 继承自IEnumerable。所以IOrderedEnumerable 没有理由不能有AsQueryable 扩展方法。顺便说一下,虽然我们在讨论技术细节,但扩展方法是静态的,静态方法不能被继承。
    • 我认为,如果您调用 .Sort(s=>0) 它将保持以前的排序顺序,而 .Sort(s=>s) 如果您对原始集合进行了排序,则可能会给您带来问题不同/动态的方式顺序。这个电话仍然会有成本,但应该不会太糟糕
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-12-16
    • 1970-01-01
    • 2019-12-19
    • 2011-03-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多