假设您正在谈论多选选择字段......很可能您每次都必须创建查询。
您的代码将需要确定传入的类别数量,然后生成 CAML。例如,如果只传递了 ABC,您的查询将是(注意没有<And>
标签):
<Where>
<Eq>
<FieldRef Name='Category'/>
<Value Type='Choice'>ABC</Value>
</Eq>
</Where>
但是,如果您通过 QueryString 传入三个选项:ABC、ABD 和 ABE,您会得到(注意<And>
标签围绕每两个组):
<Where>
<And>
<And>
<Eq>
<FieldRef Name='Category'/>
<Value Type='Choice'>ABC</Value>
</Eq>
<Eq>
<FieldRef Name='Category'/>
<Value Type='Choice'>ABD</Value>
</Eq>
</And>
<Eq>
<FieldRef Name='Category'/>
<Value Type='Choice'>ABE</Value>
</Eq>
</And>
</Where>
编辑:
static void Main(string[] args)
{
try
{
string[] parameters = { "ABC", "DEF", "GHI" };
string camlQuery = CreateCAMLQuery(parameters);
Console.WriteLine(camlQuery);
}
catch (Exception ex)
{
Console.WriteLine(ex.ToString());
}
Console.WriteLine("Press any key...");
Console.ReadKey();
}
private static string CreateCAMLQuery(string[] parameters)
{
StringBuilder sb = new StringBuilder();
if (parameters.Length == 0)
{
// perhaps set a default query?
AppendEQ(sb, "all");
}
// "AND" each parameter to the query
for (int i = 0; i < parameters.Length; i++)
{
AppendEQ(sb, parameters[i]);
if (i > 0)
{
sb.Insert(0, "<And>");
sb.Append("</And>");
}
}
sb.Insert(0, "<Where>");
sb.Append("</Where>");
return sb.ToString();
}
private static void AppendEQ(StringBuilder sb, string value)
{
// put your field's internal name in place of Category
sb.Append("<Eq>");
sb.Append("<FieldRef Name='Category'/>");
sb.AppendFormat("<Value Type='Choice'>{0}</Value>", value);
sb.Append("</Eq>");
}