C# 如何在SQL Server中构建where子句?

C# 如何在SQL Server中构建where子句?,c#,sql-server,linq,C#,Sql Server,Linq,我想从C#中的hashtable动态构建sql语句的where类 哈希表的键将是要插入的列名,哈希表的值将是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

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

哈希表的键将是要插入的列名,哈希表的值将是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()函数

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

提前谢谢

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));
当然,你必须决定是否添加一个“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));

谢谢你的建议。但是,我认为,使用参数化查询对我来说是不可能的,因为传递的参数数量只能在运行时知道,这需要一些额外的代码。顺便问一下,是否可以在LINQ中访问哈希表?@Kai,参数化查询仍然是一个自定义的运行时查询;它只是为您省去了尝试正确转义参数的麻烦,这是一项非常有价值的安全技术。@W.Craig Trader,感谢您纠正我的错误。但是,我已经有了可以处理此问题的函数,我只需要将sql语句传递给此函数。谢谢您的建议。但是,我认为,使用参数化查询对我来说是不可能的,因为传递的参数数量只能在运行时知道,这需要一些额外的代码。顺便问一下,是否可以在LINQ中访问哈希表?@Kai,参数化查询仍然是一个自定义的运行时查询;这就省去了您尝试正确转义参数的麻烦,这是一项非常有价值的安全技术。@W.Craig Trader,感谢您纠正我的错误。但是,我已经有了可以处理此问题的函数,我只需要将sql语句传递给此函数。