Optimización de una consulta LINQ to SQL
-
09-06-2019 - |
Pregunta
Tengo una consulta que se parece a esta:
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();
}
Necesito imprimir la información del pedido y el usuario que lo creó:
foreach (var o in FetchLatestOrders(0, 10))
{
Console.WriteLine("{0} {1}", o.Code, o.Customer.Name);
}
Esto produce una consulta SQL para traer los pedidos y una consulta para cada pedido para traer al cliente.¿Es posible optimizar la consulta para que incluya los pedidos y su cliente en una consulta SQL?
Gracias
ACTUALIZACIÓN:Por sugerencia de sirrocco cambié la consulta así y funciona.Solo se genera una consulta de selección:
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();
}
}
Gracias sirroco.
Solución
Otra cosa que puedes hacer es EagerLoading.En Linq2SQL puedes usar LoadOptions: Más sobre opciones de cargaUna cosa MUY extraña acerca de L2S es que puede configurar LoadOptions solo antes de que se envíe la primera consulta a la base de datos.
Otros consejos
es posible que desee considerar el uso de consultas compiladas
Mira esto http://www.3devs.com/?p=3