带有'IN'语句的LINQ-To-SQL ExecuteCommand

时间:2012-01-31 14:52:46

标签: c# linq linq-to-sql

我有以下代码:

long[] conIds = GetIDs();
dc.ExecuteCommand("UPDATE Deliveries SET Invoiced = NULL WHERE ID IN {0}",conIds);

我希望它可以工作,但executecommand语句会抛出一个异常,说明

  

查询参数不能是int64 []类型。

为什么会这样?

3 个答案:

答案 0 :(得分:1)

您将long数组传递到占位符,其中包含字符串。您需要将数组转换为带逗号分隔符的连接字符串。然后,将其传递给命令文本。

根据您使用GetIDs方法的其他位置,您可以通过让该方法返回字符串数组来简化代码。然后,您可以在此处轻松使用String.Join将该数组转换为所需的连接文本。

答案 1 :(得分:0)

你不能这样做。 SQL参数必须是单个值。

您可以通过将数组转换为逗号分隔值列表来完成此工作。

有关示例,请参阅here

command.CommandText = command.CommandText.Replace(
  "@conIDs", 
  string.Join(conIDs.Select(b => b.ToString()), ",")
);

通常,最好序列化SQL并使用表值参数来处理这类事情。有关说明,请参阅this question

答案 2 :(得分:0)

我遇到了麻烦,我发现Linq非常讲究参数。我必须将SQL语句构建为字符串并将该字符串传递给.ExecuteCommand()以使其工作。没有错误,只是没有结果。混乱。

那说有没有人看过一个很好的方法来查看Linq传递给Sql Server的内容?

我使用过SQL分析器,但它有点模糊。