(四)使用SPSiteDataQuery进行多列表查询
1、概述
前面介绍的列表查询有很多优势,但是它的一个缺点就是一次只能在一个列表中进行查询,在SharePoint中,提供了一个跨网站、跨列表查询的机制。通过使用SPSiteDataQuery对象,以及SPWeb的GetSiteData方法,将SPSiteDataQuery作为参数,可以进行跨网站和跨列表的查询。
它与列表查询的相同之处在于:
(1) 使用同样的Query属性确定筛选条件和排序条件(不支持分组条件);
(2) 使用同样的ViewFields属性确定返回字段;
(3) 使用同样的RowLimit属性确定一次返回的条目数。
它与列表查询的不同之处在于:
(1) 可以跨网站跨列表查询(但是有一定的限制,见后文);
(2) 返回的类型是DataTable,而非SPListItemCollection;
(3) 不支持像列表查询那样的分页功能;
(4) 不再有ViewAttributes和Folder指定精细的查询范围;
(5) ViewFields属性返回字段的设置略有差别。
2、同时在多个列表中进行数据查询
通过使用SPSiteDataQuery的Lists属性指定跨列表的范围。
Lists是一个string类型的属性,同样需要使用CAML的格式来定义列表的范围,定义的方法包括如下内容:
(1) 指定列表模板,查询指定列表模板的所有列表,指定方式形如:“<Lists ServerTemplate='TemplateID' />”。其中的TemplateID为列表模板的整型ID,SharePoint内置列表模板的ID可以在SPListTemplateType枚举中查到,例如通知列表模板的ID是104.
(2) 指定列表基类型,查询指定基类型的所有列表,指定方式形如:“<Lists BaseType='BaseTypeID' />”。其中的BaseTypeID是列表基类型的ID,可以通过SPBaseType枚举查到,例如文档库类型的ID为1。
(3) 指定是否查找隐藏列表,默认情况下,跨列表查询时忽略隐藏列表的(比如网站模板库、母版页库等等),可以通过在Lists属性中指定Hidden属性来查找隐藏列表,形如:“<Lists Hidden='TRUE'/>”。
(4)指定查找某些特定的列表,通过列表的Guid可以在某几个特定的列表中进行查找,形如:
/>
/>
>