你可以使用
SPSiteDataQuery
查询集合中所有网站的所有列表。通过将serverTemplate值传递给
SPSiteDataQuery.Lists
财产。任务的ServerTemplate ID是107。通过将“sitecollection”值传递给
SPSiteDataQuery.Webs
财产。
SPSiteDataQuery返回的数据表信息非常有限(我认为只有列表和项ID),因此必须在
SPSiteDataQuery.ViewFields
财产。
以下代码(改编自类文档示例)将返回所有正在进行的任务,按开始日期降序排列:
SPWeb web = SPContext.Current.Web;
SPSiteDataQuery query = new SPSiteDataQuery();
//Ask for all lists created from the tasks template.
query.Lists = "<Lists ServerTemplate=\"107\" />";
// Get the Title field.
query.ViewFields = "<FieldRef Name=\"Title\" />" ;
// Set the criteria and sort order.
query.Query = "<Where>" +
"<Eq>" +
"<FieldRef Name='Status'>" +
"<Value Type='Choice'>In Progress</Value>" +
"</Eq>" +
"</Where>" +
"<OrderBy>" +
"<FieldRef Name=\"StartDate\" Ascending='False'/>" +
"</OrderBy>";
// Query all Web sites in this site collection.
query.Webs = "<Webs Scope=\"SiteCollection\" />";
DataTable dt = web.GetSiteData(query);