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 に答える