要按条件搜索产品列表,但条件个数不定,比如搜索手机产品,客户可能只设定网络为GSM一个条件,也可能再加上价格小于2000条件,总之条件个数不确定,但所有条件都是已知的。要写成一个函数,条件参数怎么写?public List<MobileInfo> Search(/*??????*/)   // ????????
{}条件可能是1 个,也可能是5个,如果把每个条件作为一个参数进行函数重载不现象吧,我也不想拼接SQL字符串?该怎么写?

解决方案 »

  1.   

    public List<MobileInfo> Search(string[] arg)   // ????????
    {
        ....
    }
      

  2.   

    参数声明params数组。
    public List<MobileInfo> Search(pararms string[] paramList);
    调用 Search(filed1, field2);
         Search(field2);
         Search)field1, field2, field3);
      

  3.   

    Search)field1, field2, field3); -> Search(field1, field2, field3);
      

  4.   


    string strWhere="select * from table where 1=1"
    if(条件1!=string.empty)
    {
       strWhere+=条件1
    }
    if(条件2!=string.empty)
    {
       strWhere+=条件2
    }
    ....
      

  5.   

    赞同楼上,查询条件一个一个添加到查询字符串里
    (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)查询
      

  6.   

    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%'"});
      

  8.   

    感觉拼接好像是最好的办法,但是怎么处理安全问题呢,好像有注入漏洞,我一般用SqlParameter传参数进去,拼接好像就用不了这个,因为查询条件可能是string和int型。
      

  9.   

    int可以转换成string传进去后,在转回int