2011-08-28 73 views
1

我需要顯示網格標題的總行數。網格也必須處理大量的記錄。 所以我決定使用網格自定義分頁功能。 我知道如何做服務器端分頁與sql2005 ROW_NUMBER等 但我的困難是在業務邏輯層完成複雜的行基地過濾。 我認爲首先對大量記錄進行復雜過濾(以瞭解項目數量)效率並不高,也可能會導致內存不足異常。帶有業務邏輯過濾的服務器端分頁

此時此項目(asp.net web應用程序)正在使用.net framework1.1,sql2005進行生產。 生產的下一個版本將使用.net framework4.0。之後我們將升級到sql2008。

請幫我找到解決方案的問題? 謝謝。

回答

0

我想說,如果你怕出在生產內存例外的任何硬件是不夠大的,你擁有的數據量或者你的代碼確實是嚴重錯誤:)

我會完成這一切是存儲過程,包括過濾,分頁和排序。一旦你在服務器中進行了整理,並且你已經指定了你需要檢索的頁面大小和pag索引,那麼存儲過程只返回你正在查找的已經排序的單頁記錄,並且你可以將它綁定到你的UI控制。

這是你想要的還是我讓你錯了?

+0

但過濾是複雜的,把它放在一個存儲過程。 –

+0

然後必須簡化,你可以顯示一些關於如何過濾編輯你的問題的例子嗎? –

+0

過濾代碼是用c#在安全模塊中編寫的。它用於通過userProfileID參數進行行基安全篩選,併爲每個配置文件定義一組權限。 –

0

如果您使用.net 4.0,IQueryable是一個可行的選項。詳情請參閱here。基本上,IQueryable會延遲查詢的執行,以便您可以應用業務邏輯,然後從底層數據存儲(您的案例中爲sql server)獲取相關的數據。 但是,在走下這條路線之前,我會做一些查詢性能的微觀基準測試。

+0

問題是,在從數據庫獲取數據後,我按照某些用C#編寫的安全業務規則邏輯過濾結果,因此有些記錄需要從結果集中刪除,因此總計行數需要減去那些數據行已從結果集中移除。 –

+0

您能否在業務層中粘貼一些正在執行的過濾示例代碼? – Kiran