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.

¿Fue útil?

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

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top