特定の SPList に対して実行し、特定のフォルダーにスコープを設定し、その時点から再帰的に実行し、すべての ListItems (基準を満たす) とフォルダーを返す CAML クエリを作成しようとしています。
動作するはずのクエリのコードを次に示します (読みやすいように書式設定されています)。
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
.
次に ViewFields を削除して and のみを残すScope=RecursiveAll
とFSObjType=1
、空の結果セットが返されます。