子网站中的CrossListQueryInfo

时间:2013-01-04 15:33:50

标签: sharepoint caching sharepoint-2010

情况是:
我有子网站(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()))

但是这个搜索在整个sitecollection中,有什么方法可以使用它?我错过了什么?

1 个答案:

答案 0 :(得分:0)

要仅检索特定网站的项目,请指定Webs属性空值。

根据MSDN:

  

Webs 属性指定要在查询中包含的网站。   默认情况下,查询仅考虑从中获取的网站   调用了GetSiteData方法。

     

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

<Webs Scope="Recursive" />

<Webs Scope="SiteCollection" />
     

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

     

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


所以,更新后的代码:

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()))