Ottimizzazione di una query LINQ to SQL
-
09-06-2019 - |
Domanda
Ho una query simile a questa:
public IList<Post> FetchLatestOrders(int pageIndex, int recordCount)
{
DatabaseDataContext db = new DatabaseDataContext();
return (from o in db.Orders
orderby o.CreatedDate descending
select o)
.Skip(pageIndex * recordCount)
.Take(recordCount)
.ToList();
}
Devo stampare le informazioni dell'ordine e dell'utente che lo ha creato:
foreach (var o in FetchLatestOrders(0, 10))
{
Console.WriteLine("{0} {1}", o.Code, o.Customer.Name);
}
Questo produce una query SQL per portare gli ordini e una query per ogni ordine da portare al cliente.È possibile ottimizzare la query in modo che contenga gli ordini e il cliente in un'unica query SQL?
Grazie
AGGIORNAMENTO:Su suggerimento di Sirrocco ho modificato la query in questo modo e funziona.Viene generata una sola query di selezione:
public IList<Post> FetchLatestOrders(int pageIndex, int recordCount)
{
var options = new DataLoadOptions();
options.LoadWith<Post>(o => o.Customer);
using (var db = new DatabaseDataContext())
{
db.LoadOptions = options;
return (from o in db.Orders
orderby o.CreatedDate descending
select o)
.Skip(pageIndex * recordCount)
.Take(recordCount)
.ToList();
}
}
Grazie scirocco.
Soluzione
Qualcos'altro che puoi fare è EagerLoading.In Linq2SQL puoi usare LoadOptions : Altro su LoadOptionsUna cosa MOLTO strana di L2S è che puoi impostare LoadOptions solo prima che la prima query venga inviata al database.
Altri suggerimenti
potresti voler esaminare l'utilizzo di query compilate
dai un'occhiata a http://www.3devs.com/?p=3