构建SQL“;其中在“;语句
本文关键字:语句 构建 SQL | 更新日期: 2023-09-27 17:58:32
我有一个List(Of String),它对应于数据库表上的"类型"。
我们正在使用DB2ADO.NET提供程序,我的最终查询需要如下所示:
select * from table where type in (@type1, @type2, @type3, @type4)
过去,我使用ForEach循环构建了查询参数/主机变量的列表,但我真的很想找到一种在一行中构建它们的方法。当然,我可以连接所有的字符串,但添加"@"和递增数字会让我头疼。
有人知道怎么做吗?
这样的东西行得通吗?
var inList = "(" + string.Join(", ", typeList.Select(t => "@" + t)) + ")";
编辑
根据你的评论,这个怎么样?
var inList = "(" +
string.Join(", ", Enumerable.Range(1, argCount).Select(i +> "@type" + i)) +
")";
这就是我通常做的方式
string.Join(",", items.Select(i => $"'{i}'");
string dbCommand =
string.Format("select * from table where type in ({0})", string.Join(",", typeList.Select(p => "@" + p));
使用作为string.Join(",", listType.ToArray())
拆分列表
string types = string.Join(",", listType.ToArray());
Select * from table where type in (types)
一个简单的方法可以使用:
"'" + string.Join("','", myListOfNames) + "'")
SQL/ADO.NET不支持数组。因此,您必须手动构建SQL。
SQL 2008确实支持Table参数,但它似乎有很多开销。看见http://www.sommarskog.se/arrays-in-sql-2008.html了解更多详细信息。