65.9K
CodeProject 正在变化。 阅读更多。
Home

SharePoint 2010 中的递归和文件夹范围的 LINQ 查询

starIconemptyStarIconemptyStarIconemptyStarIconemptyStarIcon

1.00/5 (2投票s)

2010年10月24日

CPOL

1分钟阅读

viewsIcon

23546

LINQ to SharePoint 的技巧

引言

正如您可能在 SharePoint 2007 中体验过的那样,CAML 查询默认情况下是非递归的。换句话说,如果您执行 CAML 查询,您最终将获得列表根文件夹中的项目。SharePoint 2010 仍然如此。如果您想查询列表中的所有文件夹和子文件夹(递归查询),则必须定义额外的查询选项,如下所示。

qry.ViewAttributes = "Scope='Recursive'";

如果您想将查询范围限定到某个文件夹呢?

qry.Folder = list.ParentWeb.GetFolder("Folders DocLib/2008");

那 LINQ to SharePoint 呢?

默认行为相同,但是如果递归查询是期望的行为,则可以使用 EntityList<T> 对象的 ScopeToFolder 方法。

请注意以下查询

var q = dc.Projects.Where(p => p.DueDate < DateTime.Now.AddMonths(1));
var q = dc.Projects.ScopeToFolder("", true).Where
	(p => p.DueDate < DateTime.Now.AddMonths(1));

第一个查询针对列表根文件夹执行,而第二个查询是递归的。您可能想知道我传递给 ScopeToFolder 方法中的空 string 。那么,让我们看看 MSDN 对该方法期望的参数说了什么。

public IQueryable<TEntity> ScopeToFolder( string folderUrl, bool recursive ) 
  • folderUrl –> 文件夹的 URL
  • recursive –> true 包含子文件夹中的项目;false 排除它们

就是这样,如果您想将 LINQ 查询范围限定到特定文件夹,请将文件夹 URL 作为第一个参数传递给该方法,如果希望查询具有递归行为,则传递“true”。在第二个查询中,我只想获得递归行为,并且不想将查询范围限定到任何文件夹,因此我传递了一个空 string,这可以解决问题。

希望这有帮助!

© . All rights reserved.