2009-10-26 26 views
5

bien la búsqueda de LINQ cláusula where condicional, encontré this article, la forma en que utilizan es, como a continuación:LINQ condicional cláusula Where

var logs = from log in context.Logs 
      select log; 

if (filterBySeverity) 
    logs = logs.Where(p => p.Severity == severity); 

if (filterByUser) 
    logs = logs.Where(p => p.User == user); 

pero me preguntaba este método es eficiente? ¿Cuántas consultas realizaría linq?

+0

He mirado la respuesta y creo que este método, aunque puede ser menos eficiente, ciertamente es mucho mejor desde el punto de vista de la seguridad del tipo. Después de todo, para empezar, LINQ fue diseñado para evitar consultas dinámicas, por lo que no tiene sentido y, en segundo lugar, siempre es propenso a la inyección SQL si no tiene cuidado. –

Respuesta

2

Puede utilizar LINQ dinámica (ScottGu's Article)

para que pueda crear fácilmente su cláusula where de cadena y luego pasarlo a la Dónde método:

public string GetWhereClause() 
{ 
string whereClause = ""; 
.... 
return whereClause 
} 

var logs = context.Logs.Where(GetWhereClause()); 

Esperanza esto ayuda;)

+2

Comparar con el código que proporcioné, ¿de qué manera crees que es más eficiente? – silent

5

Sí, creo que esto es eficiente. En realidad, este código no realizará consultas, ya que no intenta leer nada de 'registros'. Cuando lo hace, debe tener en cuenta ambas condiciones en la misma consulta (es decir, una cláusula WHERE que incluye ambas condiciones).

PERO, si está utilizando LINQ y está preocupado por la eficiencia, realmente tiene que verificar todo lo que escribe utilizando las herramientas para ver qué consultas realmente se ejecutan. Puede hacerlo utilizando el Analizador de SQL Server.

Cuestiones relacionadas