Tuesday, January 18, 2011

Client Object Model ottenere una lista di dati filtrati tramite CAML

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'>EquusValue>
        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 = @"
                
                    
                        
                        Equus
                    
                
            ";
    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

No comments:

Post a Comment