public DataTable GetOneDataFromTable(string TableName, string[] ElementName,string[] ElementValue)
        {
            //foreach(String s in ElementName)
            StringBuilder sb = new StringBuilder();
            sb.Append = "select * from " + TableName + " where ";
            sb.Append=""
            DataTable dt = Tatest.DBUtility.DbHelperOleDb.GetDataTable(strSql);
            return dt;
        }我想做到几个元素的到sql内查询但是不知道需要用到多少个元素 我想这样写到类中 方便以后使用 我想把元素都设置成数组 这里该怎么写呢 或者说不用数组有什么方法好实现吗?

解决方案 »

  1.   

    你where条件是什么呢,你要达到什么目的
      

  2.   

    你把元素都加进数组了
    再遍历数组把他们加进where条件时,没什么影响吧
    是拼接where条件的意思 吗
      

  3.   

    这么写可以,只是你的name和value需要一一匹配,所以调用方表示比较头疼,另外你少了字段类型的表达所以此处俺们暂时不知道你怎么处理大体上按你现在的思路应该这样搞public DataTable GetOneDataFromTable(string TableName, string[] ElementName,object[] ElementValue)//换成object以便表达字段类型
    {
      if(a.Length!=ElementValue.length)
      {
             new throw new Exception("字段类型和值的数量不匹配");   
      }
      list<string> whereParm =new List<string>();
       for(int i=0;i<ElementName.length;i++)
     {
          if(ElementValue[i] is string)
             whereParm.add(String.Format("{0}='{1}'",ElementName[i],ElementValue[i]));
         if(if(ElementValue[i] is int32)
           whereParm.add(String.Format("{0}={1}",ElementName[i],ElementValue[i]));
           //后面可能有其他类型判定,你自己补足
       )  string wherestr=string.join(" and ",whereParm)
     }
    }
    ps:这种方式其实并不太好,除了上面的毛病以外,同时你还只能处理单一的逻辑,比如只能用 and,不能用and,or混排,不能用like等等。实际上目前这种方式已经被放弃了,大多数我们直接使用Expreesion表达式去解析
    比如GetOneDataFromTable(c=>c.xxx=="1"&&c.yy==2);这样你的逻辑上可以使用的东西要丰富的多。
    有关这方面的例子可以看http://www.cnblogs.com/coolcode/archive/2011/06/08/IQueryBuilder_v2.html
      

  4.   

    既然又被吃了,我也懒得在写那么多字了直接给你一个正确的实现方式的地址,你自己看现在的人到底会怎么玩这样的东西http://www.cnblogs.com/coolcode/archive/2011/06/08/IQueryBuilder_v2.html