2011-10-15 26 views
0

我使用與C#ASP.NET,我需要做動態查詢, 例的條件:
數據庫:如何將LINQ to SQL查詢中的條件分開?

Name  Sex 
-------------- 
John Doe M 
Jane Doe F 

現在我想允許對數據的搜索設置,但如果用戶選擇按姓名或性別搜索,只有查詢將允許搜索姓名或性別列。但是,如果用戶選擇按姓名和性別搜索,則查詢將允許按姓名和性別列進行搜索。我的問題是,我可以使用if語句來分隔查詢來說明搜索的動態特性嗎?謝謝。

回答

3

你可以這樣做:

var q = ...; 

if(sex != null) { 
    q = q.Where(r => r.Sex == sex); 
} 
if(name != null) { 
    q = q.Where(r => r.Name == name); 
} 

這將通過性別和/或名稱取決於什麼是通過過濾

q = q.Where(r => r.Sex == sex).Where(r => r.Name == name); 

相同

q = q.Where(r => r.Sex == sex && r.Name == name); 
+0

感謝您的快速反應,我是linq-to-sql的新手,所以我遇到了困難,再次感謝,非常感謝 – htg2011

0

史蒂芬。是對的,那是一種簡單易行的方法,它可以滿足您的需求。如果您遇到過可能有幾個條件語句的情況,那麼查看動態LINQ將是明智之舉。動態LINQ可以讓你編寫一個查詢,如:

DatabaseDataContext db = new DatabaseDataContext(); 

    string WhereClause = string.Empty; 

    if (!string.IsNullOrEmpty(Name)) 
     WhereClause += "Name.ToLower().Contains(\"" + Name.ToLower() + "\") AND "; 

    if (!string.IsNullOrEmpty(State)) 
     WhereClause += "City.State.Name.ToLower().Contains(\"" + State.ToLower() + "\") AND "; 

    if (!string.IsNullOrEmpty(County)) 
     WhereClause += "City.County.Name.ToLower().Contains(\"" + County.ToLower() + "\") AND "; 

    if (!string.IsNullOrEmpty(City)) 
     WhereClause += "City.Name.ToLower().Contains(\"" + City.ToLower() + "\") AND "; 


    if (WhereClause.EndsWith(" AND ")) 
     WhereClause = WhereClause.Remove(WhereClause.Length - 5); 

    var query = db.Communities 
       .Where(WhereClause) 
       .OrderBy("Name"); 

你可以在這裏的動態LINQ類http://weblogs.asp.net/scottgu/archive/2008/01/07/dynamic-linq-part-1-using-the-linq-dynamic-query-library.aspx

祝您好運!

+0

非常感謝您花時間幫助 – htg2011