2012-07-13 20 views
7

Digamos que tengo tabla Clientes y quiero filtrarlo por el siguiente texto:marco de la entidad: filtro condicional

  • País: Todos, Estados Unidos, Reino Unido, Canadá
  • Ingresos: Todo, bajo, alto,
  • medio
  • Edad: Todos, adolescente, adulto, mayor

si tuviera que construir una cadena SQL para este filtro, sería algo como esto:

if (Country != "All") sql += "country = " + Country 
if (Income != "All") sql += "and income = " + Income 
if (Age != "All") sql += "and age = " + Age; 

Por lo tanto, básicamente, el usuario puede filtrar por algunos, pero no es necesario, todos los campos.

¿Cómo se hace esto con Entity Framework?

Gracias!

+0

De acuerdo. Hecho. Gracias por la respuesta. PD: Yo también soy de Minsk. – David

Respuesta

9

Puede incluir parámetros condicionada de esta manera:

return Customers.Where(
       customer => 
       customer.Name == Name && 
       (Age == "All" || customer.Age == Age) && 
       (Income == "All" || customer.Income == Income) && 
       (Country == "All" || customer.Country == Country) 
       ).ToList(); 

Si alguna condición es verdadera (por ejemplo país es igual a All), entonces todo parámetro de condición se convierte en realidad, y este parámetro no filtra resultado.

17

LINQ a las consultas entidad devuelven IQueryable 's, por lo que puede crear la consulta de esta manera:

IQueryable<Person> query = context.People; 

if (Country != "All") 
{ 
    query = query.Where(p => p.Country == Country); 
} 

if (Income != "All") 
{ 
    query = query.Where(p => p.Income == Income); 
} 

if (Age != "All") 
{ 
    query = query.Where(p => p.Age == Age); 
} 

List<Person> fetchedPeople = query.ToList(); 

Este caso es casi demasiado simple, pero esto es muy útil en situaciones más complejas cuando se necesita añadir filtrando dinámicamente

Cuestiones relacionadas