我正在开发一个用于sharepoint 2010安装的webpart。这有多个站点,每个站点都有页面,并且可能有子站点,本身有更多页面和站点。我想获得整个安装中符合特定条件的所有页面的列表(例如title == "Test"
)。
我可以使用CAML SPSiteDataQuery对象并将“Webs”属性设置为<Webs Scope="Recursive" />
。显然,这会使查询考虑当前站点和所有子站点。
另一方面,我想尽可能使用linq2sp,因为它将为其他开发人员提供更容易的学习曲线。使用SPMetal我可以为我的站点生成一个DataContext,然后可以使用linq查询它,但是这只会访问根站点中的页面。
是否有某种方法可以控制Linq查询的范围,使其适用于所有网站中的所有网页?
感谢, 小号
答案 0 :(得分:1)
......反思......看来你(和我们所有人)都运气不好。 LINQ to Sharepoint将查询转换为SPQuery对象,这些对象只能用于查询特定列表。在Microsoft.SharePoint.Linq程序集中的任何位置都不使用SPSiteDataQuery。 我想你可以遍历执行相同查询的所有列表但这样效率非常低。
您只能使用EntityList< TEntity>.ScopeToFolder方法将特定列表范围限定为文件夹。
可能的解决方法是使用支持this one等跨站点查询的自定义Sharepoint LINQ提供程序。我没用过它所以我不能保证它。