Ottimizzare le performance del Lazy Loading con LINQ To SQL tramite il metodo AssociateWith

di Stefano Mostarda, in LINQ,

Quando si parla di relazioni One-To-Many, ad esempio Cliente-Ordini, spesso si ha l'esigenza di caricare gli ordini in Lazy, ovvero solo quando vengono utilizzati nel codice. Questo è il comportamento di default con LINQ To SQL ma non sempre è ideale in quanto spesso capita di non aver bisogno di tutti gli ordini del cliente ma solo di una parte di essi.

Tramite il metodo AssociateWith del DataContext, si può pilotare il Lazy Loading decidendo quali record caricare. Il metodo è generico ed accetta in input una lambda che rappresenta il filtro da applicare alla query effettuata per caricare i dati in Lazy.

In questo esempio, vengono caricati solo gli ultimi 10 ordini di ogni cliente italiano ordinati per data.

using (NWDataContext context = new NWDataContext())
  {
    DataLoadOptions options = new DataLoadOptions();
    options.AssociateWith<Customer>(c => c.Orders.OrderBy(p => p.OrderDate).Take(10));
    var q = from c in context.Customers
               where c.Country == "Italy"
               select c;
    foreach (var customer in q)
    {
      Console.WriteLine(customer.Orders.Count);
    }
    Console.ReadLine();
}

Commenti

Visualizza/aggiungi commenti

| Condividi su: Twitter, Facebook, LinkedIn

Per inserire un commento, devi avere un account.

Fai il login e torna a questa pagina, oppure registrati alla nostra community.

Approfondimenti

I più letti di oggi