2009-12-15 29 views
0

我正在開發一個ASP.NET MVC應用程序,我們必須編寫自己的分頁代碼。 而且我看到元素在不同的頁面上重複。發生這種情況是因爲IQueryable中元素的順序隨機變化,必須爲每個頁面查詢數據庫。 我通過按照創建日期排序元素,然後按我想要的順序來解決此問題。但我感覺它很重。有沒有更好的方法來解決這個問題。元素的順序在IQueryable中有所不同,每當我用相同的條件查詢時

回答

1

如果您通過IQuerable從數據庫中獲取行並在一列上進行排序,如果在該列中具有相同值的行的順序可能會有所不同,那麼您需要按照現在的方式進行操作,即按兩列排序,首先是你真正感興趣的那一列,然後是第二列(如日期),因爲排序是在數據庫中完成的,所以不應該有那麼大的性能影響。

但是需要做的是指定如下排序:

Context.Products 
    .Where(p => p.ProductID > 100) 
    .OrderBy(p => p.CategoryID) 
    .ThenBy(p => p.Date).ToList(); 

通知的ThenBy,將產生正確的SQL。

+0

它有什麼不同,如果我寫.OrderBy(p => p.CategoryID) .OrderBy(p => p.Date).ToList()? – San 2009-12-15 07:58:19

+0

因爲那麼你通過categoryId來排列列表,然後再按日期排序,第一個排序(按類別)不會生效,列表將按日期排序。 ordernig類別的唯一影響是具有相同日期的項目將按id排序,因此實際上應該相當於執行OrderBy(p => p.Date)。ThenBy(p => p.CategoryID)但不是肯定的是,這取決於OrderBy函數的實現。 – Torkel 2009-12-16 19:10:55

1

不,這是正確的方法。如果您不告訴它按某種順序排列,數據庫可能會以非確定性順序返回行。

相關問題