O SharePoint 2010 apresenta um
novo operador nas Caml queries.
O operador em questão é o
operador In que evita que tenhamos de escrever múltiplos Or.
Por exemplo, se tivermos o campo chamado Browser do tipo Text e quisermos procurar os registos que têm a palavra Firefox ou a palavra Chrome escrevemos a seguinte Caml query.
<Where>
<In>
<FieldRef Name='Browser' />
<Values>
<Value Type='Text'>Firefox</Value>
<Value Type='Text'>Chrome</Value>
</Values>
</In>
</Where>
Como nem sempre as nossas queries são estáticas apresento uma forma de gerar o
operador In dinamicamente através de uma coleção.
public static string InCaml(IEnumerable<string> items, string
type, string name)
{
string inFormat = "<Value Type='{0}'>{1}</Value>";
var values = new StringBuilder();
values.Append("<Values>");
foreach (string item in items)
{
values.AppendFormat(inFormat, type, item);
}
values.Append("</Values>");
var fieldRef = string.Format("<FieldRef Name='{0}' />", name);
return string.Format("<In>{0}{1}</In>", fieldRef,
values.ToString());
}
Exemplo de como chamar o método InCaml.
InCaml(new string[] { "Firefox", "Chrome" }, "Text", "Browser");