[英]SharePoint 2013 On Premise C# ClientContext Caml Query not filtering results
我在本地應用程序上使用CSOM C#ClientContext搜索以查詢特定列表,但是當我的查詢通過時,它將接收所有項目。 但是,我需要一個查詢,即使用值存儲在標簽中的查詢,該標簽本身取自另一個共享點列表。 所以我想知道我的CamlQuery的哪一部分是錯誤的,因為其他所有內容都可以。
使用(ClientContext cdmContext = new 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);
}
}
據我了解,您想獲取所有字段'ClassName'的值介於4個值(label1,label2,label3或label4)之間的項目。 測試此CAML:您需要添加視圖 :
<View> [The CAML Query]</View>
您設置對象的ViewXML ;)
如果您要求的AND錯誤,請使用OR進行測試,例如:
<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 Designer或U2U Caml Query Builder
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.