代码之家  ›  专栏  ›  技术社区  ›  Kai

如何在sqlserver中构建where子句?

  •  0
  • Kai  · 技术社区  · 14 年前

    我想从C#中的hashtable动态构建sql语句的where clase。

    哈希表的键将是要插入的列名,哈希表的值将是value。

    string sql_1="SELECT COL_1,COL_2 FROM MY_TABLE";
    string sql_2="SELECT * FROM MY_TABLE WHERE COL_3='ABC'";  //note: some statment have where clause while some do NOT have. 
    
    string sql= ToSql(sql_1,myHashTable); // the actual sql statment will be returned from ToSql
    //execute sql
    sql= ToSql(sql_2,myHashTable); // 
    //execute sql
    

    我的问题是,如何在LINQ中创建函数ToSql()函数?

    注:将考虑哈希表值的数据类型。

    提前谢谢。

    1 回复  |  直到 14 年前
        1
  •  3
  •   lc.    14 年前
    var q = String.Join(" AND ", myHashTable.Select(x => x.Key.ToString() + " = " + 
        (x.Value is string ? "'" : "") + x.Value.ToString() + 
        (x.Value is string ? "'" : "")))
    

    当然,你必须决定是否添加“WHERE”,“AND”,在添加“WHERE”之前必须先去掉一些“groupby”子句,并处理转义,但我相信你能处理好。

    不过,我会的 强烈地 建议改用参数化查询,并将参数添加到 SqlCommand . 比如:

    var q = String.Join(" AND ", myHashTable.Select(x => x.Key.ToString() + " = @" +
        x.Key.ToString()));
    
    var parameters = myHashTable.Select(x => new SqlParameter("@" + x.Key.ToString(), 
        x.Value));