CAML查询从SPList获取项目

时间:2012-10-09 13:04:29

标签: c# sharepoint-2010

我想更新部门列表中包含'finance'的列表中的Name字段。我编写了以下代码,但它更新了Name列中的每个项目,无论它是否包含“finance”。

我做错了什么?

SPListItemCollection Items = RiskAssesment.GetItems(new SPQuery()
{
     Query = @"<where>
                   <Eq>
                       <FiledRef Name 'Department'/>
                       <Value Type='Text'>Finance </Value>
                   </Eq>
               </Where>"
});

foreach (SPListItem item in Items)
{
    item["Name"] = "abcdef";
    item.Update();
}     

5 个答案:

答案 0 :(得分:3)

FiledRef 应为 FieldRef 。你忘记了等号,它应该是这样的:

<FieldRef Name='Department' />

小编辑: 我不确定CAML是否区分大小写,但如果是:将开放位置更改为<Where>

答案 1 :(得分:1)

SPListItemCollection Items = RiskAssesment.GetItems(new SPQuery()
{
     Query = @"<Where>
     <Eq>
         <FieldRef Name='Department'/>
         <Value Type='Text'>Finance </Value></Eq></Where>"
 });

  foreach (SPListItem item in Items)
  {
         item["Name"]="abcdef";
         item.Update();
  }  

答案 2 :(得分:1)

以下函数获取存储项目的子文件夹的文件夹名称和ID folder = item.folder。

最初它将为null。

static string GetParentFolder(SPListItem itemToFind, SPFolder folder)  
        { 
            SPQuery query = new SPQuery(); 
           // query.Query =  "<OrderBy><FieldRef Name='Title'/></OrderBy>";
            query.Query = "<Where><Eq><FieldRef Name=\"ID\"/><Value Type=\"Integer\">"+ itemToFind.ID +"</Value></Eq></Where>";
            query.Folder = folder;
            query.ViewAttributes = "Scope=\"Recursive\"";
            SPListItemCollection items = itemToFind.ParentList.GetItems(query);
            int intpartentFolderID=0 ;
            if (items.Count > 0)
            {
            foreach (SPListItem item in items) 
            {

                SPFile f = item.Web.GetFile(item.Url);

                string test11 = f.ParentFolder.Name;
                intpartentFolderID = f.ParentFolder.Item.ID;

                //string test1 = item.File.ParentFolder.Name;

                 return (intpartentFolderID.ToString()); 

             }
            }
            return (intpartentFolderID.ToString());     
        }  

答案 3 :(得分:0)

以下函数获取存储项目的子文件夹的文件夹名称和ID folder = item.folder。 最初它将为null。

static string GetParentFolder(SPListItem itemToFind, SPFolder folder)  
        { 
           SPQuery query = new SPQuery(); 
           // query.Query =  "<OrderBy><FieldRef Name='Title'/></OrderBy>";
            query.Query = "<Where><Eq><FieldRef Name=\"ID\"/><Value Type=\"Integer\">"+ itemToFind.ID +"</Value></Eq></Where>";
            query.Folder = folder;
            query.ViewAttributes = "Scope=\"Recursive\"";
            SPListItemCollection items = itemToFind.ParentList.GetItems(query);
            int intpartentFolderID=0 ;
            if (items.Count > 0)
            {
            foreach (SPListItem item in items) 
            {
                SPFile f = item.Web.GetFile(item.Url);

                string test11 = f.ParentFolder.Name;
                intpartentFolderID = f.ParentFolder.Item.ID;

                //string test1 = item.File.ParentFolder.Name;

                 return (intpartentFolderID.ToString()); 

             }
            }
            return (intpartentFolderID.ToString());     
        }  

由于 Deva- Cheraideva

答案 4 :(得分:0)

所以我刚刚看到这篇较老的帖子,而且我没有足够的声誉对所选答案发表评论。

但我知道在SharePoint 2013中使用CAML时肯定是区分大小写的。

仅表示开场<where>应为<Where>

希望你的问题得到解决!