2014-01-13 16 views
1

我對CamlQuery非常陌生,需要一些幫助才能使其工作。CamlQuery - 如何在C#中使用Where子句#

我安裝了一個名爲CamlDesigner的工具來幫助我生成在Sharepoint中過濾集合所需的XML,但CamlDesigner構造的XML查詢在我的C#代碼隱藏中不起作用。我有一個ID字段,我試圖過濾,我只是想從Sharepoint中檢索ID = 1(或2或3或其他)的項目。

這是由設計器生成的CAML查詢:

<Where> 
     <Eq> 
     <FieldRef Name='ID' /> 
     <Value Type='Counter'>1</Value> 
     </Eq> 
    </Where> 

這裏就是我試圖將這一CAML查詢我的C#代碼。 C#的工作原理是,但它返回「My SP Coll」中的每個項目,而不是僅返回ID等於1的項目

// Sharepoint web service to retrieve categories items there 
ClientContext clientContext = new ClientContext("https://myweb.dev.com/SP"); 
List oList = clientContext.Web.Lists.GetByTitle("My SP Coll"); 

CamlQuery camlQuery = new CamlQuery(); 
camlQuery.ViewXml = "<Query><Where><Eq><FieldRef Name='ID'/><Value type='Counter'>" + ID.ToString() + "</Value></Eq></Where></Query>"; 
Microsoft.SharePoint.Client.ListItemCollection collListItem = oList.GetItems(camlQuery); 

clientContext.Load(collListItem); 
clientContext.ExecuteQuery(); 

foreach (Microsoft.SharePoint.Client.ListItem oListItem in collListItem) { 
    string ID = oListItem["ID"].ToString(); 
} 

感謝您的幫助!

回答

2
  1. 查詢需要被包裹在一個<View>...</View>元件,除了<Query>元件。

  2. 根據生成的查詢,字段名稱爲ID而不是Id

在附註中,確保處置客戶端上下文。

和當然,要獲得通過ID就可以繞過這整個過程中,只使用

var item = list.GetItemById(ID); 
+0

用View標籤包裝它是我嘗試的第一件事情之一。可悲的是,它仍然返回集合中的每個項目。另外,我修復了「Id」。這也是由於一些測試,我忘了改回「ID」。謝謝您的幫助。 – Jagd

+0

@Jagd我看不到任何其他錯誤,但你可以輕鬆自己並使用'GetItemById'而不是所有這些。 – Servy

+0

我只打算使用GetItemById()。再次感謝! – Jagd

1

ViewXml屬性只是指向一個視圖列表中並沒有出現處理過濾的項目。

如果您要設置一個已經過濾的視圖並指定ViewXml,那麼您仍然會抓取視圖中的所有項目,但由於視圖本身已被過濾,因此您的結果集將與其匹配。