2017-05-29 62 views
0

其簡單的Retrieve Post方法代碼。 我正在整理記錄和基於pagesize(記錄數)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條記錄,當我把它的滾動會打一次GetPost方法跳過前2條記錄,並獲取未來2個最新記錄)

現在顯示倒序記錄 -

3 
2 
1 

現在,如果新紀錄第4次加和Ag艾因我們現在滾動此時頁面大小= 2再次, 現在它將再次複製後3 bcoz以前是有手機屏幕只,新增4將用3樣如下─

最終輸出被附加上 -

4 
3 
3 
2 
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 = current page } – Zoner