我有一个List<int>
我希望在我的查询中使用IN()
子句中的值。
我看过很多类似的帖子,但它们都没有为我工作。
假设我的表 T 是:
Id1 (int) | Id2(int)
Query:
Select Id1
From T
where Id2 in (5,7,9,11)
列表:
List<int> ls = new List<int>();
ls.add(5);
ls.add(7);
ls.add(9);
ls.add(11);
现在,如何在我的查询中将此列表填充为整数?
到目前为止已经尝试过:
1)
string ls = string.Join(“,”,Id2.ToArray());
string getId1 = "select Id1 from T where Id2 in (@ls)";
cmd = new SqlCommand(getId1, con);
cmd.Parameters.Add(new SqlParameter("@ls", ls));
错误:
将nvarchar值'5,7,9,11'转换为时转换失败 数据类型int。
2)
var ls = "("
+ String.Join(",", Id2.Select(x => x.ToString()).ToArray())
+ ")";
string getId1 = "select Id1 from T where Id2 in (@ls)";
cmd = new SqlCommand(getId1, con);
cmd.Parameters.Add(new SqlParameter("@ls", ls));
错误:
将nvarchar值'(5,7,9,11)'转换为时转换失败 数据类型int。
注意:我会更喜欢不使用LINQ
的答案,除非只能使用LINQ
答案 0 :(得分:0)
List<int> ls = new List<int>();
ls.Add(5);
ls.Add(7);
ls.Add(9);
ls.Add(11);
string sql = string.Format( "select Id1 from T where Id2 in ({0})", string.Join(",",ls.Select(n=> "@prm"+n).ToArray()));
SqlCommand cmd = new SqlCommand(sql);
foreach(int n in ls){
cmd.Parameters.AddWithValue("@prm"+n, n);
}