2012-07-13 16 views
7

Diciamo che ho tabella Clienti e voglio filtrare dal seguente:Entity Framework: filtro condizionale

  • Paese: Tutti, Stati Uniti, Regno Unito, Canada
  • Income: Tutti, basso, alto, media
  • Età: Tutto, adolescente, adulto, anziano

se ho dovuto costruire una stringa SQL per questo filtro, sarebbe qualcosa di simile:

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

Quindi, in sostanza, l'utente può filtrare alcuni, ma non tutti i campi necessari.

Come si fa a utilizzare Entity Framework?

Grazie!

+0

Accetto. Fatto. Grazie per la risposta. PS: Anch'io sono originario di Minsk. – David

risposta

9

è possibile includere il parametro condizionale in questo modo:

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

Se qualche condizione è vera (ad esempio paese è pari a All), quindi tutte le condizioni parametro diventa vero, e questo parametro non filtra risultato.

17

LINQ to query di entità tornare IQueryable 's, in modo da poter creare una query in questo modo:

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(); 

Questo caso è quasi troppo semplice, ma questo è molto utile in situazioni più complesse, quando è necessario aggiungere filtraggio dinamico.