7

我的 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 替换时有效)

有人可以建议我替代吗?

4

1 回答 1

2

这适用于 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);
    }
于 2013-08-02T06:24:05.803 回答