2016-05-23 1 views
1

をスキップしていない場合、最初のページとエレガントなコード、私はlinqのようなものが必要です。LINQのは、私のIQueryableに)私は単純に(スキップ適用したい

条件が存在する場合、どのようにスキップできますか? 私は間違った方法でスキップ方法を適用していますか?

現在のページが1の場合、それはではありません。は、最初のn個のページサイズレコードをスキップします。だから私は条件をifで調べる必要がある。

// elegent方法は、この

meetings = await _meetingRepository.GetAll() 
       .WhereIf(!input.IncludeCanceledMeetings,m=>!m.IsCancelled) 
       .OrderBy(input.OrderBy+" " + input.Sort) 
.SkipIf(input.CurrentPage!=1,input.PageSize*input.CurrentPage-1) 
       .Take(input.PageSize) 
       .ToListAsync(); 

おかげ

+2

コードは正常です。必要に応じて、読みやすいようにメソッド(または拡張メソッド)に展開することができます。 –

+1

あなたのコードが非凡だとあなたはなぜ信じますか? – arootbeer

+0

このようなものが動作するかもしれません:query.Select((x、index)=> new {x = x、index = index}) – jdweng

答えて

2

あなたも条件if (currentPage!=1)を必要としないようなものでなければなりません。単にquery=query.skip(PageSize*(currentPage-1))と書くことができます。 (高校の代数からの操作のご注文を覚えている)括弧に注意してください

query=query.skip(10*(1-1)) // PageSize = 10, currentPage = 1 

...定数と変数を置き換えると、これはどのようなものか見てみましょう。ゼロを乗じ1-1 = 0であるものはゼロであるので、1ページの結果のコードは次のように見える終わる:実質的に同じである

query=query.skip(0); 

query=query; 

currentPageであった場合1の代わりに2を指定すると、次のようになります。

query=query.skip(10*(2-1)) // == query=query.skip(10*1) == query=query.skip(10) 
+1

あなたの答えは正しいです、私は前にそれをテストしましたが、問題は私が最初のページとして0を送信していたことでした。それはミスケートでした。私は最初のページを1に設定しました。感謝 – Arash

+0

それがあなたを助けたら答えとしてマークすることを忘れないでください。 – DVK

関連する問題