2

我正在尝试执行这样的简洁查询:

string query = "select * from MyTable where someNumber in @Nums;";
...
connection.Query<ReturnObj>(query, new {Nums = nums})

如果 nums 为空,我会收到 MySql 语法错误。看起来 Dapper 将查询更改为如下所示:WHERE 1 = 0)所以我猜左边 ( 丢失了,这导致语法错误。是的,我意识到我可以在执行查询之前检查集合是否为空,但是我如果我不必这样做,我宁愿不这样做。

4

1 回答 1

3

这是Dapper中的一个错误,它会创建一个对 MySQL Server 5.6(及更早版本)无效的 SQL 语句。

解决方法:

  • 升级到 MySQL Server 5.7(接受 SQL Dapper 生成并返回预期结果)
  • 如您所说,在执行查询之前检查集合是否为空

检查集合是否为空的一种变体(如果您有复杂的查询等,这可能很有用NOT IN):

  var numsSql = nums.Any() ? "@Nums" : "(select null)";
  var query = $"select * from MyTable where someNumber in {numsSql};";
  conn.Query(query, new { Nums });
于 2017-10-27T00:39:53.733 回答