Falando em termos de performance no todo(velocidade, integridade e etc...), usar expressões lambdas para consultar banco de dados, é melhor nos termos acima ou não ou depende?
2 Respostas
Para o caso de objetos que implementam IQueryable
, há o tempo da construção da sentença que consome algum processamento, portanto, partindo de termos absolutos, a sentença em SQL estático será ou mais rápida ou equivalente ao SQL gerado.
Entretanto, falando em integridade e consistência, o SQL estático, apenas, não garante. Todo o mapeamento de dados entre as estruturas da linguagem de programação precisa ser feito manualmente pelo programador, o que pode produzir erros comuns como a falta de colunas e/ou informações que podem causar erros na execução de um fluxo trivial do sistema.
No caso do Entity Framework, ao persistir dados, o Framework realiza algumas verificações automaticamente, o que melhora a consistência e a integridade referencial (não garante 100%, mas melhora). Se o código é gerado a partir de um banco de dados que já existe (Database First), os objetos do Modelo terão copiar fidedignamente o banco. Se o banco é gerado a partir do código (Code First), toda e qualquer validação colocada como configuração será replicada para a base.
Comparando uma e outra, Expression Methods
(vulgo lambda
) e LINQ
, não há diferença em performance, visto que ambas montam o objeto IQueryable
de maneira muito similar. A diferença mesmo está na expressividade de cada uma. Expression Methods
são mais sucintos, enquanto que LINQ
é mais didática e clara por se aproximar de uma linguagem natural, no caso, o inglês.
-
Ok, mas nesse caso, conforme eu perguntei, a comparação entre linq e lambda dentro do que vc falou, tem como dizer se essa é melhor do que aquela ou ambas são equivalentes no contexto performance.– pnetCommented 5/06/2014 às 20:39
-
Diferença há sim. Lambda Expression é mais performático que LINQ. Segue link que comprova o que digo. http://imasters.com.br/artigo/15036/dotnet/comparativo-de-performance-linq-lambda-e-dynamic-linq
-
Fábio, bem vindo ao Stackoverflow! Agradecemos você querer ajudar! No entanto, a sua resposta se resume a um link que neste momento é válido mas nada nos garante que continue a sê-lo no futuro. O stackoverflow deve ser encarado como um repositório de conhecimento e não apenas um site de pergunta resposta. Ao responder devemos pensar, não só em quem perguntou, mas em todos aqueles que no futuro poderão usufruir da nossa resposta.– ramaralCommented 3/11/2014 às 13:38
-
Só para constar, o exemplo deste site é falho, ele nunca enumera os valores o que faz que que tanto a expressão lambda quando a query linq nunca sejam realmente executadas. Commented 3/11/2014 às 13:48