我的linq是
GetPublishedArticleList().Where(x => x.Category.CatName == catName).OrderByDescending(x=>x.PublishedDate).Skip(skip).Take(last);
运行上面的代码时,我遇到异常
“方法'Skip'仅支持LINQ to Entities中的排序输入。必须在方法'Skip'之前调用'OrderBy'方法。
我希望LINQ能够理解我需要先按降序排序数据,然后才能应用Skip和Take。 (以上代码适用于OrderBy替换OrderByDescending时)
有人可以建议我替代吗?
答案 0 :(得分:1)
这适用于EF5。 (.net 4.5) 我看不出你的代码有什么问题。 你确定在测试时你有正确的方法序列吗? 源类型是Iqueryable还是Iqueryable?
public virtual IQueryable<TPoco> GetSortedPageList<TSortKey>(Expression<Func<TPoco, bool>> predicate,
Expression<Func<TPoco, TSortKey>> sortBy,
bool descending,
int skipRecords, int takeRecords) {
if (!descending) {
return Context.Set<TPoco>()
.Where<TPoco> predicate)
.OrderBy(sortBy)
.Skip(skipRecords)
.Take(takeRecords);
}
return
Context.Set<TPoco>()
.Where<TPoco>(predicate)
.OrderByDescending(sortBy)
.Skip(skipRecords)
.Take(takeRecords);
}