LINQ查询添加orderby使得Skip和Take不能正常运行Linqpad

5 c# linq linq-to-sql

我想使用Skip和Take进行分页,但我也想使用orderby

没有Skip和Take,使用LinqPad我可以执行以下操作,这适用于orderby

var query = from m in Orders
            orderby m.ID descending
            select m;
query.Dump();
Run Code Online (Sandbox Code Playgroud)

但是,如果我保持秩序,那么这会失败

query = query.Skip(1 + 10).Take(10);
query.Dump();
Run Code Online (Sandbox Code Playgroud)

我删除了orderby并且它有效,但我想要订单....

var query = from m in Orders
    select m;   
query = query.Skip(1 + 10).Take(10);            
query.Dump();
Run Code Online (Sandbox Code Playgroud)

Mar*_*zek 15

发生错误,因为您在第一次查询后使用var和编译推断query类型IOrderedEnumerable<T>,并且您尝试IEnumerable<T>使用Skip/ Takecalls 分配它:

无法隐式将类型' System.Collections.Generic.IEnumerable<Order>' 转换为' System.Linq.IOrderedEnumerable<Order>'.存在显式转换(您是否错过了演员?)

如果你在开头输入query,IEnumerable<T>一切都会正常工作

IEnumerable<Order> query = from m in Orders
                           orderby m.ID descending
                           select m;

query = query.Skip(10).Take(10);
Run Code Online (Sandbox Code Playgroud)