以下查询有一个要分配字符串列表的参数:
select * from a_table where something in :list_of_strings
我有一个List<string>
要分配给list_of_strings
参数的 C#。
给定一个OracleCommand
(代表上述查询),如何将 my 绑定List<string>
到命令的list_of_strings
参数?
实际上,您不能将单个参数绑定到值列表。在这种情况下,您可以将值连接到查询字符串。但是,这是不建议的,因为您可以在子句
中放置的值是有限的。IN
List<string> list = new List<string>();
list.Add("1");
list.Add("2");
list.Add("3");
list.Add("4");
string listStr = string.Join(",", list);
//result: "1,2,3,4"
如果您的字符串列表是字符串列表,您可以这样做:
List<string> list = new List<string>();
list.Add("one");
list.Add("two");
list.Add("three");
list.Add("four");
string listStr = string.Concat("'", string.Join("','", list), "'");
//result: "'one','two','three','four'"
请求参数:
string query = string.Format("select * from a_table where something in({0})", listStr);
Obs:您可能必须处理列表为空的可能性。
另一种可能性是在临时表上插入所有值并在 select 语句中使用它。与连接技术相比,这将具有无限字符串值的优势并避免在 DBMS 上进行新的硬解析:
SELECT *
FROM A_TABLE
WHERE SOMETHING IN(SELECT SOMETHING FROM TEMP_TABLE)