当前位置:编程学习 > C#/ASP.NET >>

求一查询思路!

要按条件搜索产品列表,但条件个数不定,比如搜索手机产品,客户可能只设定网络为GSM一个条件,也可能再加上价格小于2000条件,总之条件个数不确定,但所有条件都是已知的。

要写成一个函数,条件参数怎么写?

public List<MobileInfo> Search(/*??????*/)   // ????????
{

}


条件可能是1 个,也可能是5个,如果把每个条件作为一个参数进行函数重载不现象吧,我也不想拼接SQL字符串?

该怎么写? --------------------编程问答-------------------- public List<MobileInfo> Search(string[] arg)   // ????????
{
    ....
}
--------------------编程问答-------------------- 参数是数组 --------------------编程问答-------------------- 这是多条件查询,把每个条件都组合起来就行了。 --------------------编程问答-------------------- 参数声明params数组。
public List<MobileInfo> Search(pararms string[] paramList);
调用 Search(filed1, field2);
     Search(field2);
     Search)field1, field2, field3); --------------------编程问答-------------------- Search)field1, field2, field3); -> Search(field1, field2, field3); --------------------编程问答--------------------

string strWhere="select * from table where 1=1"
if(条件1!=string.empty)
{
   strWhere+=条件1
}
if(条件2!=string.empty)
{
   strWhere+=条件2
}
....
--------------------编程问答-------------------- 赞同楼上,查询条件一个一个添加到查询字符串里
(1)连接数据库
(2)拼凑查询字符串
    string str="select * from 表名 where 1=1";
    if(条件1!="")
         str=str+" and "+"条件1";
    if(条件2!="")
         str=str+" and "+"条件2";
    if(条件3!="")
         str=str+" and "+"条件3";
……
(3)查询 --------------------编程问答--------------------
public List <MobileInfo> Search(pararms string[] paramList)
{
  string strSql="select * from 表名 where 1=1"; 
  foreach (string strPar in paramList)
  {
    if (strPar != null && strPar.Trim() != "")
    {
      strSql += " AND ("+ strPar +") ";
    }
  }
  strSql += " Order By orderField ";

  // ...
}
--------------------编程问答-------------------- 模型就是 职责链模式

 职责链模式最原始的模型 就是7楼的那个判定 --------------------编程问答--------------------
//调用:
Search("field1=100");
Search("field1>100", "field1<200");
Search("field1>100 and field1 <> 102");
Search(new string[]{"field1=100 or field2='ABC'", "field3 like 'A%'"});
--------------------编程问答-------------------- 拼接把!!!!!!!!!! --------------------编程问答-------------------- 感觉拼接好像是最好的办法,但是怎么处理安全问题呢,好像有注入漏洞,我一般用SqlParameter传参数进去,拼接好像就用不了这个,因为查询条件可能是string和int型。 --------------------编程问答-------------------- int可以转换成string传进去后,在转回int
补充:.NET技术 ,  ASP.NET
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,