我是CAML的新手。CAML似乎是过滤列表的好方法,但我在写嵌套的andor语句时很吃力。
我试图从小事做起,写一个只有两个条件的CAML查询,这样我就能掌握它的窍门。以下是我失败的尝试。
<View>
<Query>
<Where>
<and>
<Contains>
<FieldRef Name='PracticeArea_x0028_s_x0029_' />
<Value Type='Text'>Lean</Value>
</Contains>
<NotInclude>
<FieldRef Name='PracticeArea_x0028_s_x0029_' />
<Value Type='Text'>,</Value>
</NotInclude>
</and>
</Where>
</Query>
</View>
任何帮助,支持,和或洞察力这个社区可以提供非常感激。
NotInclude用于允许多个值的Lookup字段,所以如果你针对一个文本字段进行过滤,就无法使用。
https:/docs.microsoft.comen-ussharepointdevschemanotincludes-element-query。
你可以先用 Contains 过滤,然后用 Linq 或类似的方法过滤。
SPList list = web.Lists.TryGetList("TestFilter");
SPQuery spQuery = new SPQuery();
spQuery.Query = @"<Where>
<Contains>
<FieldRef Name='PracticeArea' />
<Value Type='Text'>Lean</Value>
</Contains>
</Where>";
var items = list.GetItems(spQuery);
var filterItems=items.Cast<SPListItem>().Where(item => string.Format("{0}",item["PracticeArea"]).IndexOf(',') <0);
Console.WriteLine(filterItems.Count());