当遇到多条件自由组合查询时怎么对SQL语句进行处理呢?总不能一个一个的进行判断吧,具体的就像相亲网站的搜索那样,怎么实现呢?
白云天的方法最简单,只是不好看而已,也是大多数时候选用的方式,举一个简单例子。
List<string> listWhere = new List<string>(); List<SqlParameter> listParameters = new List<SqlParameter>(); if (cbName.Checked) { listWhere.Add("Name like @name"); listParameters.Add(new SqlParameter("name","%"+txtQueryName.Text+"%")); } if (cbMobile.Checked) { listWhere.Add("MobilePhone like @mobile"); listParameters.Add(new SqlParameter("mobile", "%" + txtQueryMobile.Text + "%")); } string sql = "select * from T_Customers\n"; if (listWhere.Count > 0) { string sqlWhere = string.Join(" and ", listWhere.ToArray()); sql =sql+" where "+sqlWhere; } dataGridView1.DataSource = SqlHelper.ExecuteDataTable(sql, listParameters.ToArray());
那就是一個一個判斷。拼接sql語句哦。複雜的都應該是拼接的 哦、
如果你ORM层是自己拼接字符串的,那么就只能拼字符串。如果你ORM层是用LINQ TO SQL, EF一类的,那么可以动态构建表达式树去查询。
像那些应该都是拼接SQL字符串的吧?关注...
应该都是拼接的
SQL查询条件常用的就是通过判断拼接SQL语句,好像还没有发现其它的方法:
wherestr1="where 1=1 ";
if(wherestr1!=""){ strsql+="and colname1='colvalue1'"; }
if(wherestr2!=""){ strsql+="and colname2='colvalue2'"; }
同样期待有更好的解决方法。。。
按条件判断,拼接sql会是一个不错的方法
如果用Entity Framework,用LINQ进行查询条件的拼接很方便。
LINQ~