2013-02-15 39 views
0

我想查詢使用CAML(第一次做這個)列表項,並根據修改的日期,所以我可以接觸到最新的文件對項目進行排序。但是,當試圖根據ID獲取SPListItem時,我失敗了。獲取基於指標項目從SharePoint CAML查詢到SPListItemCollection

代碼:

SPQuery query = new SPQuery(); 
String camlquery = "<OrderBy><FieldRef Name='Modified' Ascending='False' /></OrderBy>";       
query.ViewAttributes = "Scope = 'Recursive'"; 
query.ViewFields = "<FieldRef Name='Modified' /><FieldRef Name='Title' /><FieldRef Name='Name' />"; 
query.Query = camlquery; 
query.IncludeMandatoryColumns = true; 
SPListItemCollection col = list.GetItems(query); 


//failing here... I think 
SPListItem item = col.GetItemById(0); 

有沒有辦法從SPListItemCollection內獲得基於其索引的SPListItem?

我已經試過

SPListItem item = col[0]; 

還沒有運氣。

這裏是我得到的錯誤:

值不在預期的範圍內。 描述:執行當前Web請求期間發生未處理的異常。請查看堆棧跟蹤以獲取有關該錯誤的更多信息以及源代碼的位置。

異常詳細信息:System.ArgumentException:值沒有在預期的範圍內。

+0

是否檢查集合確實包含的項目? 如果得到像命令錯誤「值沒有在預期範圍內」'COL [0]'它通常意味着空數組。 – banana 2013-02-17 10:47:14

回答

0

如果你想使用SPListItemId那麼你並不需要去CAML,試試這個,

SPSite oSite = new SPSite("http:/MyTestSite/"); 
SPWeb oWeb = oSite.OpenWeb(); 
SPList oList = oWeb.Lists["MyCustomList"]; 

SPListItem oListItem = oList.Items.GetItemById(1); 

但如果你堅持使用CAML得到它,請確保您有Id在您的ViewFields caml查詢。

而且使用Id爲獲得項目:

foreach (ListItem item in col) 
{ 
    if(item["Id"] == 1) //Only an example 
    { 
     var itemFromId = item; 
    } 
} 

另外需要注意,ID屬性的值是不一樣的項目列表項集合中的索引。該屬性包含該項目的基於1的整數ID,該ID大於之前添加的項目的ID。如果該項目被刪除,其ID不會被重新使用。 [MoreInfo]

0

的問題是與我回來集合。我必須確保在使用該項目之前有結果:

if (col.Count > 0) 
{ 
SPListItem item = col[0]; 
} 

愚蠢的錯誤。