3

這裏的問題:二鳥一石在RIA服務的Silverlight

的數據庫是非常正常的,這一個特定的查詢依賴於數據庫中的多重關係。該查詢旨在連接所有表,構造整個對象,然後返回這些對象的列表。

換句話說,這個特定的查詢做了很多工作。現在

,查詢也只返回項目的X數字,因爲它支持分頁,但我們也需要知道,是否有物品的總數。

目前這兩項任務是獨立的,但在我們的域服務中的查詢非常相似。理想情況下,我想要做的就是組合這兩個查詢,以便對服務器的調用只發生一次,而不是兩次,並且連接只發生一次。

輸出/參考參數不工作,因爲該函數用於返回項目的IQueryable的,我卡如何退回的項目名單,以及總數。

我確定有人遇到過這個 - 任何想法?

回答

0

如果問題出在客戶端服務器通信上,您可以將計數結果放在結果響應的頭部。

+0

我不知道我可以修改響應的頭 - 記住,這是使用RIA服務,自動生成Web服務以及對客戶端的對象,所以,我沒有太多的改變生成的服務的能力。我知道在WCF服務中,輸出參數是受支持的,因爲我之前可以做到這一點。 – AlishahNovin 2010-09-28 15:29:23

1

項目的計數連接表是一樣的東西回來的那些記錄的子集。他們恰好分享了一定數量的SQL代碼(專門加入表格)。 RIA執行實際的分頁服務器端,因此實際上每個分頁呼叫都會有一個稍微不同的查詢。

計數操作也將運行比記錄查詢的SQL 計數經常使用的數據庫索引只(雖然LINQ的可能優化此爲你相同的最終結果進行......聰明的LINQ編碼器快得多! )。因爲你只會請求一次總計數(當我假設頁面加載時),那麼你開始通過對數據不同部分的多個查詢進行分頁,每次調用時都會觸及數據庫的不同部分。

您是關閉它們視爲兩個不同的功能(如你)更好,佩戴額外的服務器調用的少量的開銷。總有其他地方你可以取得更大的收益(緩存等)。

如果有疑問:不要過於複雜只能得到非常少的緣故任何進程。

+0

要清楚 - 我並不完全使用一些控件和實體中存在的內置分頁函數。我不確定這是你的想法,但我想我可能會提及它。至於Linq的優化,Count只在所有必需的連接和過濾完成後才被調用。這就是爲什麼我懷疑計數並不完全採取不同的執行路徑 - 在計數或分頁數據檢索之前必須滿足許多條件。總的來說,我不認爲這個過程由於速度和維護的增加而過於複雜。 – AlishahNovin 2010-09-28 18:59:26

+0

@AlishahNovin:是的,我假設您正在利用RIA的服務器端Linq評估功能。沒有看到你的代碼(並且鑑於你沒有對RIA進行標準化使用),我無法進一步幫助。無論如何,祝你的項目好運。 – 2010-09-29 08:14:46