Filtrando itens de lista no SharePoint com SPQuery
Autor: Matheus Dias | Publicado: 2014-10-09T08:00:00-03:00

Mostrarei aqui como realizar a consulta por itens de lista do SharePoint retornando somente os itens que atendem à um filtro determinado utilizando SPQuery.




É possível aplicar o mesmo filtro de dados utilizando uma estrutura "foreach" com "if" interno.
Conforme exemplo abaixo:


//Acesso ao site collection
using (SPSite site = new SPSite("http://siteURL"))
{
&nbsp; &nbsp; //Acesso ao site
&nbsp; &nbsp; using (SPWeb web = site.OpenWeb())
&nbsp; &nbsp; {

&nbsp; &nbsp; &nbsp; &nbsp; //Acesso à lista do SharePoint
&nbsp; &nbsp; &nbsp; &nbsp; var list = web.Lists.TryGetList("Nome da Lista");

&nbsp; &nbsp; &nbsp; &nbsp; if (list != null)
&nbsp; &nbsp; &nbsp; &nbsp; {
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; //Itera sobre todos os itens da lista
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; foreach (SPListItem item in list.Items)
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; {
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if (Convert.ToInt32(item["Campo2"]) &gt; 1000)
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; {
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; //Capturar os itens que atendem a condição
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }
&nbsp; &nbsp; &nbsp; &nbsp; }

&nbsp; &nbsp; }
}


Porém, este método implicaria em realizar uma leitura de todos os itens da lista para realizar a verificação podendo degradar sua performance.

Abaixo temos a mesma funcionalidade de filtro de itens de lista utilizando SPQuery.
O código está comentado.


//Acesso ao site collection
using (SPSite site = new SPSite("http://siteURL"))
{
&nbsp; &nbsp; //Acesso ao site
&nbsp; &nbsp; using (SPWeb web = site.OpenWeb())
&nbsp; &nbsp; {

&nbsp; &nbsp; &nbsp; &nbsp; //Acesso à lista do SharePoint
&nbsp; &nbsp; &nbsp; &nbsp; var list = web.Lists.TryGetList("Nome da Lista");

&nbsp; &nbsp; &nbsp; &nbsp; if (list != null)
&nbsp; &nbsp; &nbsp; &nbsp; {
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; //Declaração e inicialização do objeto
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; SPQuery query = new SPQuery();

&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; //Informe os campos que serão retornados
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; query.ViewFields = "&lt;FieldRef Name='Campo1'/&gt;" +
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; "&lt;FieldRef Name='Campo2'/&gt;";

&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; //Query
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; //No exemplo abaixo é realizado um filtro no campo 'Campo2' trazendo somente itens com valor maior que 1000
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; query.Query = "&lt;Where&gt;&lt;Geq&gt;&lt;FieldRef Name='Campo2'/&gt;" +
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; "&lt;Value Type='Number'&gt;1000&lt;/Value&gt;&lt;/Geq&gt;&lt;/Where&gt;";

&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; //Coleção de itens da lista retornados usando a query acima construída
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; SPListItemCollection collListItems = list.GetItems(query);
&nbsp; &nbsp; &nbsp; &nbsp; }

&nbsp; &nbsp; }
}


Qualquer dúvida ou sugestão informe nos comentários.

Abraço !