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
Per inserire un commento, devi avere un account.
Fai il login e torna a questa pagina, oppure registrati alla nostra community.
Approfondimenti
Creare espressioni riutilizzabili nelle query LINQ per Entity Framework
Mischiare codice server side e client side in una query LINQ con Entity Framework
Utilizzare il metodo ExceptBy per eseguire operazione di sottrazione tra liste
Usare la libreria PredicateBuilder per eseguire query tramite Entity Framework che usano or su più campi
Utilizzare il metodo IntersectBy per eseguire l'intersection di due liste
Utilizzare il metodo Index di LINQ per scorrere una lista sapendo anche l'indice dell'elemento
Utilizzare il metodo CountBy di LINQ per semplificare raggruppamenti e i conteggi
I più letti di oggi
- Effettuare il multi-checkout in linea nelle pipeline di Azure DevOps
- Gli oggetti CallOut di Expression Blend 4.0
- Sfruttare una CDN con i bundle di ASP.NET
- Utilizzare un DataContext specifico per la modalità design time di Blend e Visual Studio nei controlli Silverlight
- Alleggerire le applicazioni WPF sfruttando gli oggetti Freezable
- Le DirectInk API nella Universal Windows Platform


