N年前我們是這樣來 拼接查詢字串的:
public string Test(string a, string b, string c,string d) { string sql = "SELECT * FROM Users WHERE 1=1"; if (!string.IsNullOrEmpty(a)) { sql += " AND name='" + a + "'"; } if (!string.IsNullOrEmpty(b)) { sql += " AND age='" + b+ "'"; } if (!string.IsNullOrEmpty(c)) { sql += " AND sex='" + c + "'"; } if (!string.IsNullOrEmpty(d)) { sql += " AND address='" + d + "'"; } return sql.ToString(); }
現在我們使用linq來實現上邊的代碼:
public void Test(string a, string b, string c,string d) { QueryContext query = new QueryContext(); var q = from u in query.Users select u; if (!string.IsNullOrEmpty(a)) { q = q.Where(p => p.name == a); } if (!string.IsNullOrEmpty(b)) { q = q.Where(p => p.age == b); } if (!string.IsNullOrEmpty(c)) { q = q.Where(p => p.sex == c); } if (!string.IsNullOrEmpty(d)) { q = q.Where(p => p.address == d); } q.ToList(); //上邊的所有if,只有到此處才會執行 }
ps: 如果查詢字串內 不是AND,而是OR 的話
如:
public string Test(string a, string b, string c,string d) { string sql = "SELECT * FROM Users WHERE 1=1"; if (!string.IsNullOrEmpty(a)) { sql += " OR name='" + a + "'"; } if (!string.IsNullOrEmpty(b)) { sql += " OR age='" + b+ "'"; } if (!string.IsNullOrEmpty(c)) { sql += " OR sex='" + c + "'"; } if (!string.IsNullOrEmpty(d)) { sql += " OR address='" + d + "'"; } return sql.ToString(); }
此種情況,通過linq可以這樣實現:
public void Test(string a,string b,string c,string d) { QueryContext query = new QueryContext(); var q1 = from u in query.Users where u.name== a && a != "" || u.age == b && b != "" || u.sex == c && c != "" || u.address ==d && d !="" select u; q1.ToList(); }