2012-07-13 17 views
7

Powiedzmy mam tabelę Klienci i chcę, aby filtrować je brzmienie:Entity Framework: filtr warunkowy

  • Kraj: wszystkie, USA, Wielka Brytania, Kanada
  • dochód: Wszystko, niski, wysoki, średni
  • Wiek: Wszystko, nastolatek, dorosły, senior

gdybym musiał zbudować ciąg SQL dla tego filtra, to byłoby coś takiego:

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

Zasadniczo użytkownik może filtrować według niektórych, ale nie wszystkich pól.

Jak to zrobić, korzystając z Entity Framework?

Dzięki!

+0

Zgadzam się. Gotowe. Dziękuję za odpowiedź. PS: Ja też pochodzę z Mińska. – David

Odpowiedz

9

Możesz dołączyć parametr warunkowy w ten sposób:

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

Jeśli jakiś warunek jest spełniony (np kraj jest równa All), wtedy wszystko stanie się prawdą parametr, a parametr ten nie filtrować wyniki.

17

LINQ do zapytań Entity powrócić IQueryable „s, dzięki czemu można zbudować zapytanie w ten sposób:

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

Ten przypadek jest prawie zbyt proste, ale jest to bardzo pomocne w bardziej skomplikowanych sytuacjach, gdy trzeba dodać filtrowanie dynamicznie.