2010-06-30 43 views
3

我正在開發一個用於SharePoint 2010安裝的Web部件。這有多個網站,每個網站都有頁面,並且可能有子網站,它們自己擁有更多網頁和網站。我想獲取整個安裝中符合特定條件的所有頁面的列表(例如title == "Test")。在Sharepoint服務器上跨所有站點和子站點的Linq查詢?

我可以使用CAML SPSiteDataQuery對象並將'Web'屬性設置爲<Webs Scope="Recursive" />。顯然這使查詢考慮當前網站和所有子網站。

另一方面,如果可能,我想使用linq2sp,因爲它會爲其他開發人員提供更容易的學習曲線。使用SPMetal我可以爲我的網站生成一個DataContext,然後可以用linq查詢它,但是這隻會訪問根網站中的頁面。

是否有某種方法來控制Linq查詢的範圍,以便它可以在所有網站中的所有頁面上工作?

感謝, 小號

+0

這是一個很好的問題,通常回答爲「使用EntityList .ScopeToFolder」,它與您提出的問題無關。很難想象他們忘了這個。來自Codeplex的開源Linq2SP提供程序的簡單調整足以添加範圍參數。必須...反映...在RTM上,看看發生了什麼 – 2010-07-08 09:39:27

回答

1

在... ...反射這樣看來,你(和我們的)的運氣了。 LINQ to Sharepoint將查詢轉換爲只能用於查詢特定列表的SPQuery對象。 SPSiteDataQuery不在Microsoft.SharePoint.Linq程序集中的任何位置使用。 我想你可以遍歷所有執行相同查詢的列表,但這將是非常低效的。

您只能使用EntityList< TEntity>.ScopeToFolder方法將特定列表限制到文件夾。

可能的解決方法是使用支持跨站點查詢的自定義Sharepoint LINQ提供程序,如this one。我沒有用過它,所以我不能擔保。

+0

爆炸,我懷疑這可能是答案。目前我已經回到使用CAML方法,但我懷疑這需要在未來某個時候進行積極的優化。謝謝! – Stark 2010-07-08 14:04:08

+0

深入思考後,我懷疑L2SP不會很快支持跨站點查詢(即直到下一個版本)。每次使用SPQueries都可以加載一個列表。看來L2SP背後的邏輯是一個列表 - 一個實體,就好像Sharepoint是一個數據庫!爲了支持跨站點查詢或對內容類型的查詢,更改這種方式對於在Service Pack中推出將有太大的改變。 深感失望.... – 2010-07-08 15:16:55

相關問題