我首先在代碼中使用EF4,並有一個持久性存儲庫和一個與其交互的服務層。我有一個服務層方法,在我的資源庫上調用一個IQueryable方法,並返回一個包含實體的IEnumerable。我還需要返回總記錄數,以便計算分頁鏈接。如何從我的服務層方法公開總記錄數和IEnumable分頁記錄集合?
如何從我的服務方法返回int和IEnumerable?
- 使用out參數上總行的方法計數
- 創建一個單獨的類,其包括總的行數作爲屬性
- 移動尋呼LINQ查詢出服務層(暴露出IQueryable來自服務層上的回購)
- 在服務層上創建一個完全獨立的方法,該方法爲count執行新的查詢。
所有這些都應該工作,但哪一個最清潔?
更新:這是一些體系結構的說明。如果這是錯誤的,那麼請告訴我更好的方法(例如 - 做在表示層,而不是服務層分頁等)
回購層:
回報DbSet的IQueryable的,抽象的DB訪問從表現層
服務層:
並在IQueryable的LINQ查詢過濾和剛剛得到的頁面項目爲使用跳過和採取必要和返回的IEnumerable(打算也設定爲名單上返回,以避免任何的DbContext壽命問題)
表示層:
調用服務層上的方法(getPagedResults(過濾器,PAGENUMBER,pageSize的))
從外觀上來看我也會需要添加一個單獨的方法來獲得總體結果。希望能夠在一個電話中完成這一切。
我不想將所有記錄帶回演示文稿,然後頁面...似乎效率低下。
如果你已經返回'IEnumerable'是否有一些特定的原因,你不只是在'IEnumerable'上使用'.Count()'?你只是提出了前端的子集?前端不應該負責分頁嗎? –
AllenG
您返回的IEnumerable是否包含所有項目? (與count相同數量的項會返回) – Magnus
@AllenG - 我在服務層本身進行分頁,然後向UI/Codebehind使用者返回一個列表。這樣我可以避免任何與我的Dbcontext生存期有關的問題。另外,我不必將所有記錄發送到前端,然後執行分頁......將直接在服務層查詢中獲取我需要的記錄。 – jpshook