2016-02-26 120 views
0

我使用linq語句來獲取我的公司評論,但它跳過了錯誤的結果。Linq跳過跳過錯誤的結果?

如果我通過它currentPage = 1它會得到正確的結果,如果我通過它currentPage 2它做錯了。每頁的評論數量爲10. GUID ID也正確傳遞。

public IList<SupplierReview> GetAmount(int pageAmount, int currentPage, Guid companyId) 
    { 
     var total = _context.SupplierReview.Count(); 
     var skipAmount = pageAmount * (currentPage - 1); 
     if (skipAmount < total) 
     { 
      if (pageAmount < (total - skipAmount)) 
      { 
       //return the page amount of reviews 

       return _context.SupplierReview 
        .Where(x => x.Company.Id == companyId) 
        .OrderBy(x => x.Id) 
        .OrderBy(x => x.ReviewDate) 
        .Skip(skipAmount) 
        .Take(pageAmount) 
        .ToList(); 
      } 
      else 
      { 
       //if the left amount is less than the pageAmount, 
       //then only the leftovers should get taken 

       return _context.SupplierReview 
        .Where(x => x.Company.Id == companyId) 
        .OrderBy(x => x.Id) 
        .OrderBy(x => x.ReviewDate) 
        .Skip(skipAmount) 
        .Take(total - skipAmount) 
        .ToList(); 
      } 
     } 
     //if nothings left, return null 
     return null; 
    } 

錯誤可能是愚蠢的,但我似乎無法看到它......任何想法?

謝謝!

+0

第二次調用'OrderBy'(在每個查詢中)應該是'ThenBy'而不是?第一個'OrderBy'被扔掉了。 – Mephy

回答

0

這是好的指定比(實際)集合更大的號數到兩個Skip & Take擴展方法,在這種情況下,你會得到一個空的集合。

這意味着我們可以改進代碼,如下所示。

return _context.SupplierReview 
        .Where(x => x.Company.Id == companyId) 
        .OrderBy(x => x.Id) 
        .OrderBy(x => x.ReviewDate) 
        .Skip(pageAmount * currentPage) //use currentPage + 1 if index assumed to start with 1 
        .Take(pageAmount) 
        .ToList(); 
+0

對,測試出來,你是對的!似乎工作得很好......但是,我仍然在我的蹤跡中得到錯誤的結果。我有11條評論,當我打開第2頁時,我從第1頁得到結果1? – Curator

+0

除非集合在兩者之間得到修改,否則應該返回正確的結果,您是否獲得了已經作爲page1的一部分顯示的額外行或一行? –

+0

如果可能的話附上截圖,這有助於解決問題。 –

2

我首先想到跳過太多的頁面是不正確的。它看起來像你混合了總數:

Where(x => x.Company.Id == companyId)

我覺得像total計算應該包括這個Where

var total = _context.SupplierReview.Count();

然後匹配您的company.ID時計數?看看你的else條件。如果你.Take(total - skipAmount),並且總計算不考慮你的公司ID,你最終會試圖採取太多,可能不存在的金額。

+0

如果頁面是5,我正在跳過40條評論 – Curator

+0

我看,我讀得有點太快... – GEEF

+0

因爲頁面1有1-10 第2頁有11-20 – Curator