我使用與C#ASP.NET,我需要做動態查詢, 例的條件:
數據庫:如何將LINQ to SQL查詢中的條件分開?
Name Sex
--------------
John Doe M
Jane Doe F
現在我想允許對數據的搜索設置,但如果用戶選擇按姓名或性別搜索,只有查詢將允許搜索姓名或性別列。但是,如果用戶選擇按姓名和性別搜索,則查詢將允許按姓名和性別列進行搜索。我的問題是,我可以使用if語句來分隔查詢來說明搜索的動態特性嗎?謝謝。
我使用與C#ASP.NET,我需要做動態查詢, 例的條件:
數據庫:如何將LINQ to SQL查詢中的條件分開?
Name Sex
--------------
John Doe M
Jane Doe F
現在我想允許對數據的搜索設置,但如果用戶選擇按姓名或性別搜索,只有查詢將允許搜索姓名或性別列。但是,如果用戶選擇按姓名和性別搜索,則查詢將允許按姓名和性別列進行搜索。我的問題是,我可以使用if語句來分隔查詢來說明搜索的動態特性嗎?謝謝。
你可以這樣做:
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);
史蒂芬。是對的,那是一種簡單易行的方法,它可以滿足您的需求。如果您遇到過可能有幾個條件語句的情況,那麼查看動態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
祝您好運!
非常感謝您花時間幫助 – htg2011
感謝您的快速反應,我是linq-to-sql的新手,所以我遇到了困難,再次感謝,非常感謝 – htg2011