情况是:
我有子网站(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中,有什么方法可以使用它?我错过了什么?
答案 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()))