uso introduccion expresiones consultas consulta avanzadas linq linq-to-sql optimization

introduccion - Optimizar una consulta de LINQ a SQL



select linq to sql c# (2)

Tengo una consulta que se ve así:

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 orden para traer al cliente. ¿Es posible optimizar la consulta para que traiga los pedidos y su cliente en una consulta SQL?

Gracias

UDPATE: Por sugerencia de sirrocco, cambié la consulta de esta manera 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 sirrocco.


Otra cosa que puedes hacer es EagerLoading. En Linq2SQL puedes usar LoadOptions: Más en LoadOptions. Una cosa muy extraña acerca de L2S es que puedes establecer LoadOptions solo antes de que se envíe la primera consulta a la Base de datos.