1

情况是:
我有子站点(SPWeb)htp://servername/subsitename/
,我需要使用 CrossListQueryInfo 在所有列表中查找项目,但只是在这个子站点(SPWeb)中我这样做:

 var query = new CrossListQueryInfo
                            {
                                Lists = "<Lists ServerTemplate=\"100\" />",
                                ViewFields =  "...",
                                Webs = "<Webs Scope=\"Recursive\" />",
                                WebUrl = web.ServerRelativeUrl,
                                UseCache = true,
                                Query =  "..."
                            };
var cache = new CrossListQueryCache(query);
var dataTable = cache.GetSiteData(web.Site, CrossListQueryCache.ContextUrl()))

但是在整个站点集合中进行此搜索,使用它的正确方法是什么?我想念什么?

4

1 回答 1

0

为了仅检索特定站点的项目,请为Webs属性指定空值。

根据 MSDN:

Webs属性指定要包括在查询中的网站。默认情况下,查询只考虑调用 GetSiteData 方法的网站。

您可以通过将 Webs 属性设置为包含Webs标记和 Scope属性的字符串来扩大查询的范围。Scope 属性的可能值包括 Recursive 和 SiteCollection。

<Webs Scope="Recursive" />

<Webs Scope="SiteCollection" />

当 Scope 属性设置为 Recursive 时,查询会考虑当前网站和当前网站的所有子网站。

当 Scope 属性设置为 SiteCollection 时,查询会考虑与当前网站位于同一网站集中的所有网站。在两个属性值中,这是更具包容性的


所以,更新的代码:

var query = new CrossListQueryInfo
                            {
                                Lists = "<Lists ServerTemplate=\"100\" />",
                                ViewFields =  "...",
                                Webs = string.Empty,  // considers only the Web site from which the GetSiteData method was invoked
                                WebUrl = web.ServerRelativeUrl,
                                UseCache = true,
                                Query =  "..."
                            };
var cache = new CrossListQueryCache(query);
var dataTable = cache.GetSiteData(web.Site, CrossListQueryCache.ContextUrl()))
于 2013-05-08T15:12:09.900 回答