2016-09-15 74 views
0

我在内部部署应用程序上使用CSOM C#ClientContext进行搜索以查询某个列表,但是当我的查询经过时它会接收所有项目。不过,我想要一个查询,这是一个使用值存储提供的查询,该查询本身是从另一个共享点列表中获取的。所以我想知道我的CamlQuery的哪一部分是错误的,因为一切正常。SharePoint 2013 On Premise C#ClientContext Caml查询不会筛选结果

使用(ClientContext cdmContext =新的ClientContext(URL))

    { 
         cdmContext.Credentials = fabrikam_credentials; 

         Web cdmWeb = cdmContext.Web; 

         List cdmList = cdmWeb.Lists.GetByTitle("ListOfClasses"); 

         if (cdmList == null) return; 

         CamlQuery cdmQuery = new CamlQuery(); 
         cdmQuery.ViewXml = "<Query><Where><And><Or><Eq><FieldRef Name='ClassName'></FieldRef><Value Type='Text'>" + Label1.Text + "</Value></Eq><Eq><FieldRef Name='ClassName'></FieldRef><Value Type='Text'>" + Label2.Text + "</Value></Eq></Or><Or><Eq><FieldRef Name='ClassName'></FieldRef><Value Type='Text'>" + Label3.Text + "</Value></Eq><Eq><FieldRef Name='ClassName'></FieldRef><Value Type='Text'>" + Label4.Text + "</Value></Eq></Or></And></Where></Query>"; 
         ListItemCollection cdmItems = cdmList.GetItems(cdmQuery); 
         if (cdmItems == null) return; 

         cdmContext.Load(cdmItems); 
         cdmContext.ExecuteQuery(); 

         if (cdmItems != null) 
         { 
          foreach (ListItem cdmItem in cdmItems) 
          { 
           string cClassName = cdmItem["ClassName"].ToString(); 
           string cInstructorName = "Professor Buckman"; 
           DateTime cStartDate = DateTime.Parse(cdmItem["StartDate"].ToString()); 
           DateTime cEndDate = DateTime.Parse(cdmItem["_EndDate"].ToString()); 
           int cRoomNumber = Int32.Parse(cdmItem["ClassNumber"].ToString()); 
           string cDayOfTheWeek = cStartDate.DayOfWeek.ToString(); 

           System.Web.UI.WebControls.TableRow fuRow1 = new System.Web.UI.WebControls.TableRow(); 
           System.Web.UI.WebControls.TableCell fuR1C1 = new System.Web.UI.WebControls.TableCell(); 
           fuR1C1.Text = cClassName; 
           System.Web.UI.WebControls.TableCell fuR1C2 = new System.Web.UI.WebControls.TableCell(); 
           fuR1C2.Text = cRoomNumber.ToString(); 
           System.Web.UI.WebControls.TableCell fuR1C3 = new System.Web.UI.WebControls.TableCell(); 
           fuR1C3.Text = cStartDate.ToString(); 
           fuRow1.Cells.Add(fuR1C1); 
           fuRow1.Cells.Add(fuR1C2); 
           fuRow1.Cells.Add(fuR1C3); 
           FUScheduler.Rows.Add(fuRow1); 
           System.Web.UI.WebControls.TableRow fuRow2 = new System.Web.UI.WebControls.TableRow(); 
           System.Web.UI.WebControls.TableCell fuR2C1 = new System.Web.UI.WebControls.TableCell(); 
           fuR2C1.Text = cInstructorName; 
           System.Web.UI.WebControls.TableCell fuR2C2 = new System.Web.UI.WebControls.TableCell(); 
           fuR2C2.Text = cDayOfTheWeek; 
           System.Web.UI.WebControls.TableCell fuR2C3 = new System.Web.UI.WebControls.TableCell(); 
           fuR2C3.Text = cStartDate.ToString(); 
           fuRow2.Cells.Add(fuR2C1); 
           fuRow2.Cells.Add(fuR2C2); 
           fuRow2.Cells.Add(fuR2C3); 
           FUScheduler.Rows.Add(fuRow2); 


          } 
         } 

回答

0

如果我明白了,你想要得到谁拥有场的4个值(LABEL1,LABEL2,LABEL3之间的值 '类名' 所有项目或标签4)。 测试得到控制而这个CAML: 你需要添加查看

<View> [The CAML Query]</View> 

您设置ViewXML你的对象的

如果你与你的请求,是错误的,测试用或类似:

<View> 
<Query> 
    <Where> 
     <Or> 
     <Eq> 
      <FieldRef Name='ClassName' /> 
      <Value Type='Text'>" + Label1.Text + "</Value> 
     </Eq> 
     <Or> 
      <Eq> 
       <FieldRef Name='ClassName' /> 
       <Value Type='Text'>" + Label2.Text + "</Value> 
      </Eq> 
      <Or> 
       <Eq> 
        <FieldRef Name='ClassName' /> 
        <Value Type='Text'>" + Label3.Text + "</Value> 
       </Eq> 
       <Eq> 
        <FieldRef Name='ClassName' /> 
        <Value Type='Text'>" + Label4.Text + "</Value> 
       </Eq> 
      </Or> 
     </Or> 
     </Or> 
    </Where> 
</Query> 
</View> 

你的字段'ClassName'的类型是一个文本(单行文本)? 否则您可以使用一些外部工具来帮助您构建您的Caml:CAML DesignerU2U Caml Query Builder