在IN()子句

时间:2018-05-01 12:42:28

标签: c# sql-server list linq

我有一个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

1 个答案:

答案 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);
    }