C#WHERE INを使用した大まかなクエリ

c# dapper

質問

私はこのような大雑把なクエリを実行しようとしています:

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

また、numsが空の場合、MySql構文エラーが発生します。 Dapperはクエリを次のように変更しているようです: WHERE 1 = 0)これは左にあると思いますので、構文エラーの原因になります。クエリが、私はむしろ私がしなければならない場合はないだろう。

受け入れられた回答

これは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 });


ライセンスを受けた: CC-BY-SA with attribution
所属していない Stack Overflow
ライセンスを受けた: CC-BY-SA with attribution
所属していない Stack Overflow