2012-07-13 97 views
7

比方說,我有客戶表,我想通過以下對其進行過濾:實體框架:條件篩選

  • 國家:所有,美國,英國,加拿大
  • 收入:全,低,高,媒體
  • 年齡:全部,少年,成年,老年

,如果我不得不建立該濾波器的SQL字符串,它會是這樣的:

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

所以,基本上,用戶可以過濾一些,但不是所有的字段。

你如何使用實體框架來做到這一點?

謝謝!

+0

同意。完成。謝謝回覆。 PS:我也是明斯克人。 – David 2012-07-13 14:32:50

回答

9

可以包括有條件的參數是這樣的:

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

如果某些條件爲真(例如國家等於All),那麼所有的參數條件爲真,該參數不過濾結果。

17

LINQ到實體查詢返回IQueryable的,所以你可以建立你的查詢是這樣的:

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

這種情況幾乎是太簡單了,但是當你需要添加這是更復雜的情況非常有幫助動態過濾。