Pergunta

Eu tenho uma consulta que tem esta aparência:

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();
}

Eu preciso imprimir as informações da ordem e o usuário que o criou:

foreach (var o in FetchLatestOrders(0, 10))
{
    Console.WriteLine("{0} {1}", o.Code, o.Customer.Name);
}

Isso produz uma consulta SQL para trazer as ordens e uma consulta para cada um, a fim de trazer o cliente.É possível otimizar a consulta para que ele traz a pedidos e de clientes em uma consulta SQL?

Obrigado

UDPATE:Por sugestão de sirrocco eu mudei a consulta como esta, e funciona.Apenas uma consulta de selecção é gerado:

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();
    }
}

Graças sirrocco.

Foi útil?

Solução

Outra coisa que você pode fazer é EagerLoading.Em Linq2SQL você pode usar LoadOptions : Mais sobre LoadOptions Uma coisa estranha sobre L2S é que você pode definir LoadOptions apenas antes da primeira consulta é enviada para o Banco de dados.

Outras dicas

você pode querer olhar para utilizar compilado consultas

ter um olhar para http://www.3devs.com/?p=3

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top