我正在使用带有C#的ASP.NET,我需要使查询的条件动态化,
例如:
数据库:
Name Sex
--------------
John Doe M
Jane Doe F
现在我想允许对数据集进行搜索,但如果用户选择按名称或性别进行搜索,则只有查询才允许搜索名称或性别列。但是,如果用户选择按名称和性别进行搜索,则查询将允许按名称和性别列进行搜索。我的问题是我可以使用if语句分隔查询以解释搜索的动态性质吗?谢谢。
答案 0 :(得分: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);
答案 1 :(得分:0)
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
祝你好运!