我們經常需要對一個列表進行查詢,此時最靈活的方式就是直接使用SPQuery對象。這個對象的查詢文法稱為CAML。一般為了簡單起見,我們會通過下面這樣小工具先產生一個查詢範例
我們可以看到查詢文本大致如下
<Query>
<Where>
<Contains>
<FieldRef Name='_x6d4b__x8bd5_' />
<Value Type='Text'>chenxizhang</Value>
</Contains>
</Where>
</Query>
點擊"Test"之後,可以看到如下效果
下面,我們就很自然地想到將這個查詢文本用於我們自己的SPQuery對象
SPSite site = new SPSite("http://localhost:8080");
SPWeb web = site.OpenWeb();
SPList list = web.Lists["測試文件庫"];
SPQuery q = new SPQuery();
q.Query = string.Format("<Query><Where><Contains><FieldRef Name='{0}' /><Value Type='Text'>{1}</Value></Contains></Where></Query>", "_x6d4b__x8bd5_", "chenxizhang");
q.ViewFields = list.DefaultView.ViewFields.SchemaXml;
foreach (SPListItem item in list.GetItems(q))
{
Console.WriteLine(item.ID);
}
Console.WriteLine("完成查詢");
以上代碼看似很正常,但很奇怪的是,查詢似乎沒有起作用,因為它總是返迴文檔庫全部的ListItem
經過檢查和確認,一定要將<Query>這個根項目拿掉,才可以生效。所以這是典型的由工具產生的誤導啊