我想使用Skip和Take进行分页,但我也想使用orderby
没有Skip和Take,使用LinqPad我可以执行以下操作,这适用于orderby
var query = from m in Orders
orderby m.ID descending
select m;
query.Dump();
但是,如果我保留orderby,那么这将失败
query = query.Skip(1 + 10).Take(10);
query.Dump();
我删除了orderby并且它有效,但我想要orderby ....
var query = from m in Orders
select m;
query = query.Skip(1 + 10).Take(10);
query.Dump();
答案 0 :(得分:14)
发生错误,因为您在第一次查询后使用var
和编译器推断query
类型为IOrderedEnumerable<T>
,并且您尝试使用{IEnumerable<T>
向其分配Skip
{1}} / Take
来电:
无法隐式转换类型 '
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);
答案 1 :(得分:1)
所选答案是正确的,但是如果您没有绑定到具有类型顺序的模型,那么这将起作用
MarcinJuraszek是对的。
Rectangle rect = new Rectangle(0, 0, 160, 90);
Label cutOutText = new Label("YAY");
rect.setFill(Color.RED);
rect.setInverseClip(cutOutText);
你将以你的方式得到那个错误
但不必使用Cannot implicitly convert type 'System.Collections.Generic.IEnumerable<Order>' to 'System.Linq.IOrderedEnumerable<Order>'. An explicit conversion exists (are you missing a cast?)
...
IEnumerable<Order>
当我知道我想要跳过第一条记录时,我在 LINQPAD 中遇到了同样的问题
所以对我来说:
var query = (from m in Orders
orderby m.ID descending
select m).Skip(10).Take(10);
query.Dump();
答案 2 :(得分:1)
了解更多。如果您使用或不使用它,您可以不按升序或降序排序您的查询。你可以使用下面的代码。
var comments = (from c in ESO_tblComments
.Where(d => d.TblTipsId == 10312)
select c).OrderBy(xx=>1==1).Skip(1);