使用Skip和Take in LINQ的OrderByDescending显示错误

时间:2013-08-02 05:52:48

标签: c# linq entity-framework linq-to-sql linq-to-entities

我的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时)

有人可以建议我替代吗?

1 个答案:

答案 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);
    }