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





1.00/5 (2投票s)
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
–> 文件夹的 URLrecursive
–>true
包含子文件夹中的项目;false
排除它们
就是这样,如果您想将 LINQ 查询范围限定到特定文件夹,请将文件夹 URL 作为第一个参数传递给该方法,如果希望查询具有递归行为,则传递“true
”。在第二个查询中,我只想获得递归行为,并且不想将查询范围限定到任何文件夹,因此我传递了一个空 string
,这可以解决问题。
希望这有帮助!