2009-05-22 12 views
11

Me están pasando un conjunto de parámetros querystring dentro de una clase de parámetros con los que consultar una base de datos de imágenes. Con cada llamada algunos parámetros pueden ser nulos. Así que en SQL construiría la consulta como¿Cómo construir una cláusula Linq to Sql where bit a bit?

if (parameters.Value1 != null) 
{ 
    sql.Append("sql_where_clause"); 
} 

if (parameters.Value2 != null) 
{ 
    sql.Append("sql_where_clause"); 
} 

¿Cómo hago lo mismo con Linq?

Respuesta

11

fácil, IQueryables no se evalúan hasta que enumere, así que simplemente siga etiquetando en cláusulas where.

if (parameters.Value1 != null) 
{ 
    results = results.Where(x => <some condition>); 
} 

if (parameters.Value2 != null) 
{ 
    results = results.Where(x => <some other condition>); 
} 
+6

Tenga en cuenta que esto sólo funciona realmente para 'predicados AND'ing. –

+0

¿Funcionará esto al usar Omitir y Tomar? –

13

La mejor manera de construir dinámicamente donde cláusulas es el uso de la maravillosa Albahari PredicateBuilder.

Puede usar esto para construir expresiones where-clause que contengan OR y AND. soporte integrado lenguaje de este principio se quiso pero didn't quite make en C# 3.

Por ejemplo:

var whereClause = PredicateBuilder.False<Customer>(); 

if (parameters.Value1 != null) 
{ 
    whereClause = whereClause.Or(customer => customer.City == parameters.Value1); 
} 

var query = db.Customers.Where(whereClause); 
+0

Esto hizo/salvó mi día. Gracias. Y estaba pensando que simplemente no conseguí Linq en sql, ya que recién comencé a usarlo ... pero, por desgracia, el enlace de PredicateBuilder fue genial. :) Definitivamente esto es algo que debería estar allí? – Brian