quinta-feira, 24 de novembro de 2011

SharePoint 2010: Operador In, Caml

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");

Sem comentários:

Enviar um comentário