以下CAML查询对我不起作用..我对sharepoint平台了解不多。我正在使用SP 2007并尝试使用IN运算符来查找字段。
"<Where>"
+ "<And>"
+ "<And>"
+ "<In>"
+ "<FieldRef Name='Role'/>"
+ "<Values>"
+ "<Value Type = 'Text'>A</Value>"
+ "<Value Type = 'Text'>B</Value>"
+ "</Values>"
+ "</In>"
+ "<Leq>"
+ "<FieldRef Name='Enddate'/><Value Type = 'DateTime'>" + SPUtility.CreateISO8601DateTimeFromSystemDateTime(Dt) + " </Value>"
+ "</Leq>"
+ "</And>"
+ "<Includes>"
+ "<FieldRef Name='Menu'/><Value Type='Text'>Benefits</Value>"
+ "</Includes>"
+ "</And>"
+ "</Where>";
以上查询不返回任何内容,但我的列表中包含上述组合的值。
如果我稍微修改一下查询,如下所示使用IN,那么它工作正常。
"<Where>"
+ "<And>"
+ "<And>"
+ "<Eq>"
+ "<FieldRef Name='Role'/>"
//+ "<Values>"
+ "<Value Type = 'Text'>A</Value>"
//+ "<Value Type = 'Text'>B</Value>"
//+ "</Values>"
+ "</Eq>"
+ "<Leq>"
+ "<FieldRef Name='Enddate'/><Value Type = 'DateTime'>" + SPUtility.CreateISO8601DateTimeFromSystemDateTime(Dt) + " </Value>"
+ "</Leq>"
+ "</And>"
+ "<Includes>"
+ "<FieldRef Name='Menu'/><Value Type='Text'>Benefits</Value>"
+ "</Includes>"
+ "</And>"
+ "</Where>";
(请不要建议我使用CAML查询构建器,因为我无法在我的DEV盒上安装任何东西。而且我还没有在我的本地安装SP WSS :))
答案 0 :(得分:6)
CAML的IN运算符是在Sharepoint 2010中引入的。您无法在Sharepoint 2007中使用它。要获得相同的结果,您必须将其写为OR。
<Or>
<Eq>
<FieldRef Name='Role' />
<Value Type='Text'>A</Value>
</Eq>
<Eq>
<FieldRef Name='Role' />
<Value Type='Text'>B</Value>
</Eq>
</Or>
答案 1 :(得分:2)
如果有人仍然使用Sharepoint 2007并且想要使用具有多个条件的IN运算符,您可以实现如下所示,这里我使用“OR”运算符代替“IN”
string lCAMLQuery = "<Where>"
+ "<And>"
+ "<And>"
+ "<Leq>"
+ "<FieldRef Name='Enddate'/><Value Type = 'DateTime'>" + SPUtility.CreateISO8601DateTimeFromSystemDateTime(Dt) + " </Value>"
+ "</Leq>"
+ "<Or>"
+ "<Eq>"
+ "<FieldRef Name='Role' />"
+ "<Value Type='Text'>A</Value>"
+ "</Eq>"
+ "<Eq>"
+ "<FieldRef Name='Role' />"
+ "<Value Type='Text'>D</Value>"
+ "</Eq>"
+ "</Or>"
+ "</And>"
+ "<Includes>"
+ "<FieldRef Name='Menu'/><Value Type='Text'>Benefits</Value>"
+ "</Includes>"
+ "</And>"
+ "</Where>";
答案 2 :(得分:1)
string lCAMLQuery = @"<Where>
<And>
<And>
<Leq>
<FieldRef Name='Enddate'/><Value Type = 'DateTime'>" + SPUtility.CreateISO8601DateTimeFromSystemDateTime(Dt) + " </Value>
</Leq>
<Or>
<Eq>
<FieldRef Name='Role' />
<Value Type='Text'>A</Value>
</Eq>
<Eq>
<FieldRef Name='Role' />
<Value Type='Text'>D</Value>
</Eq>
</Or>
</And>
<Includes>
<FieldRef Name='Menu'/><Value Type='Text'>Benefits</Value>
</Includes>
</And>";