【发布时间】:2013-08-02 05:52:47
【问题描述】:
我的 linq 有点东西
GetPublishedArticleList().Where(x => x.Category.CatName == catName).OrderByDescending(x=>x.PublishedDate).Skip(skip).Take(last);
运行上述代码时出现以下异常
“方法 'Skip' 仅支持 LINQ to Entities 中的排序输入。方法 'OrderBy' 必须在方法 'Skip' 之前调用。
我希望 LINQ 了解我需要先按降序对数据进行排序,然后才能应用 Skip 和 Take。 (上面的代码在 OrderByDescending 被 OrderBy 替换时有效)
有人可以给我建议吗?
【问题讨论】:
-
你能先打电话给Take吗?这将返回一个 IEnumerable(来自 IOrderedQueryable),您可以在其上调用 Skip。如果这会影响您的索引,您可以将其更改为
Take(skip + last).Skip(skip) -
哇——这真的很奇怪。 听起来对我来说就像一个错误......
-
@John:不,首先调用
Take会破坏结果......关键是我们这里有一个IOrderedQueryable,而不是IOrderedEnumerable- 我们正在尝试以减少从数据库传输的数据量。 -
@JonSkeet 知道了,我不记得了,我懒得去查文档
-
@JonSkeet 是对的。以防万一有人怀疑 GetPublishedArticleList() 只不过是 context.TableName
标签: c# linq entity-framework linq-to-sql linq-to-entities