A otimização de uma LINQ to SQL query
-
09-06-2019 - |
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.
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