2017-05-29 4 views
0

その簡単なRetrieve Postメソッドコード。 私はレコードをソートしており、ページサイズ(レコード数)に基づいてSkip and Take next recordsです。linq skipを使用してレコードを表示するときに重複する項目を避ける方法

public IEnumerable<TEntity> GetPost(Expression<Func<TEntity, bool>> filter = null, int? page = 0, int? pageSize = null, params SortExpression<TEntity>[] sortExpressions) 
    { 
     //Filter the query set 
     IQueryable<TEntity> query = DbSet; 

     if (filter != null) 
     { 
      query = query.Where(filter); 
      if (query.Count() < 1) 
      { 
       throw new Exception(); 
      } 
     } 
     // sort the filtered query result 
     if (sortExpressions != null) 
     { 
      IOrderedQueryable<TEntity> orderedQuery = null; 
      for (var i = 0; i < sortExpressions.Count(); i++) 
      { 
       if (i == 0) 
       { 
        if (sortExpressions[i].SortDirection == ListSortDirection.Ascending) 
        { 
         orderedQuery = query.OrderBy(sortExpressions[i].SortBy); 
        } 
        else 
        { 
         orderedQuery = query.OrderByDescending(sortExpressions[i].SortBy); 
        } 
       } 
       else 
       { 
        if (sortExpressions[i].SortDirection == ListSortDirection.Ascending) 
        { 
         orderedQuery = orderedQuery.ThenBy(sortExpressions[i].SortBy); 
        } 
        else 
        { 
         orderedQuery = orderedQuery.ThenByDescending(sortExpressions[i].SortBy); 
        } 

       } 
      } 
      // skip rows according to page number and page size 
      if (page != null) 
      { 
       query = orderedQuery.Skip(((int)page - 1) * (int)pageSize); 
      } 
     } 

     if (pageSize != null) 
     { 
      query = query.Take((int)pageSize); 
     } 

     return query.ToList(); 
    } 

問題最新の投稿が最初に来るように、DESCのモバイルアプリケーションにレコードを表示しています。例えば

- レコードセットが

1 
2 
3 

pagesize is =2

です(私はそれが前の2つのレコードをスキップし、次の2つの最新のレコードを取得するために、再度 GetPost方法をヒットするスクロールしないとき1ページのみ2レコードを表示できることを意味します)

今DESC順にレコードを表示 - 新しい第四レコードが追加した場合

3 
2 
1 

とAg AIN我々は以前にそれが唯一の携帯電話の画面上があり、新しく追加された4は、その3

below-のような最終的な出力が追加されますbcoz再び、 は、今では再びポスト3を複製します今、この時点ページサイズ= 2をスクロール -

4 
3 
3 
2 
1 

このような状況は避けたいです。

1つの解決策は、モバイルアプリケーション側で繰り返し投稿を確認できます。メソッドGetPostのAPI側で処理する方法はありますか?

このようなシナリオを維持/回避する方法はありますか? enter image description here

答えて

1

GetPostメソッドは最後の投稿IDをパラメータとして使用する必要があります。

まだ表示されていないすべての投稿を.AddRange()メソッドで読み込むと、

すべての投稿が完了した後でのみ、ページサイズに基づいてページが分割される可能性があります。

+0

ページングのaddrangeのサンプル例はありますか? – Neo

+0

多分これは次のようなものです - 'for(var page = 1; page <= Math.ceil(items/itemsOnPage); page ++){ // page =現在のページ }' – Zoner

関連する問題