我有一个在 SharePoint 2010 列表中搜索的 x 人的列表。 如何在 XML 中构建类似于 if 语句的 or 语句
if( person1 || person2 || person3 || ... personx)
由于每个<Or>
都必须有 2 个孩子,不多也不少,到目前为止我有这个:
query.InnerXml = "<Where>" +
"<Or>" +
"<Or>" +
"<Contains>" +
"<FieldRef Name="Member" />" +
"<Value Type="Text">" +
"Person1" +
"</Value>" +
"</Contains>" +
"<Contains>" +
"<FieldRef Name="Member" />" +
"<Value Type="Text">" +
"Person2" +
"</Value>" +
"</Contains>" +
"</Or>" +
"<Contains>" +
"<FieldRef Name="Member" />" +
"<Value Type="Text">" +
"Person3" +
"</Value>" +
"</Contains>" +
"</Or></Where>";
但是我想不出一种好方法在循环浏览我的x人列表时做出所有其他或陈述
>SharePoint 2010 添加了一个In
子句,这简化了此操作。
下面是将所有人放入包装器Value
帮助器的方法:
public static string ValuesAsCAML(IEnumerable<string> values, string type)
{
StringBuilder output = new StringBuilder();
foreach (string value in values)
{
output.AppendFormat("<Value Type=`{0}`>{1}</Value>", type, value);
}
return output.ToString();
}
有了它,您现在可以编写:
var people = new[] { "Person1", "Person2", "Person3" };
string values = ValuesAsCAML(people, "Text");
var query = string.Format(
@"<Where>
<In>
<FieldRef Name='Member` />
<Values>
{0}
</Values>
</In>
</Where>"
, values);