Nel periodo pre-festivo (http://bitvector.tostring.it/blog/post/come-migliorare-le-prestazioni-di-una-query-tramite-client-object-model/) avevo preannunciato questo post, dove farò vedere come applicare un filtro affinchè possiamo ottenere solamente i dati necessari alla nostra applicazione per migliorarne le prestazioni.
Per filtrare i dati che vogliamo ottenere a monte della nostra richiesta potremo utilizzare il vecchio buon CAML.
Facendo finta di voler ottenere tutti i contatti (creati in questo post: http://bitvector.tostring.it/blog/post/popoliamo-la-nostra-lista-di-contatti-tramite-il-client-object-model-di-sharepoint-2010/) che hanno nel campo Company il valore Equus creeremo una query caml uguale alla seguente:
<View><Query>
<Where>
<Eq>
<FieldRef Name='Company' />
<Value Type='Text'>Equus</Value>
</Eq>
</Where>
</Query></View>
Possiamo usare questa query per i nostri scopi in questa maniera:
string webUrl = "http://indirizzoMacchina";
using (ClientContext ctx = new ClientContext(webUrl))
{
List list = ctx.Web.Lists.GetByTitle("MyContactsList");
CamlQuery query = new CamlQuery();
query.ViewXml = @"<View><Query>
<Where>
<Eq>
<FieldRef Name='Company' />
<Value Type='Text'>Equus</Value>
</Eq>
</Where>
</Query></View>";
ListItemCollection items = list.GetItems(query);
ctx.Load(items, x => x.Include(i => i["FullName"], i => i["Company"], i => i["Email"]));
ctx.ExecuteQuery();
foreach (var item in items)
Console.WriteLine(item["FullName"].ToString() + "\t" + item["Company"].ToString()
+ "\t" + item["Email"].ToString());
}
Console.ReadLine();
Facendo così riusciamo ad ottenere solamente gli item necessari alla nostra applicazione e miglioriamo le prestazioni del sistema.
Enjoy