我正在尝试编写一个针对特定 SPList 执行的 CAML 查询,范围为特定文件夹,从该点递归,并返回所有 ListItems(符合条件)和文件夹。
这是查询的代码,看起来应该可以工作(为便于阅读而格式化):
SPQuery query = new SPQuery();
query.Query = "
<Where>
<Or>
<Contains>
<FieldRef Name=\"FileRef\" />
<Value Type=\"Text\">foo</Value>
</Contains>
<Eq>
<FieldRef Name=\"FSObjType\" />
<Value Type=\"Lookup\">1</Value>
</Eq>
</Or>
</Where>";
query.ViewFields = "
<FieldRef Name=\"CustomField1\" Nullable=\"TRUE\" />
<FieldRef Name=\"CustomField2\" Nullable=\"TRUE\" />
<FieldRef Name=\"CustomField3\" Nullable=\"TRUE\" />
";
query.RowLimit = 500;
query.ViewAttributes = "Scope=\"RecursiveAll\"";
query.Folder = startingFolder;
DataTable dt = myList.GetItems(query).GetDataTable();
所以 - 这只会返回 ListItems - 没有文件夹。
如果我从查询中删除其他条件,只留下FSObjType=1
,我会收到 COM 异常“无法完成此操作。请重试。”
如果我然后删除 ViewFields,只留下Scope=RecursiveAll
and FSObjType=1
,我会得到一个空的结果集。