Requête C # Dapper utilisant WHERE IN

c# dapper

Question

J'essaie d'effectuer une requête dapper comme ceci:

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

Et j'obtiens une erreur de syntaxe MySQL si nums est vide. Il semble que Dapper change la requête pour ressembler à ceci: WHERE 1 = 0) donc je suppose que c'est la gauche (il manque, ce qui provoque l'erreur de syntaxe. Oui, je réalise que je peux vérifier si la collection est vide avant de l'exécuter) la requête, mais je préfère pas si je n'ai pas à le faire.

Réponse acceptée

Ceci est un bogue dans Dapper où il crée une requête SQL non valide pour le serveur MySQL 5.6 (et antérieur).

Solutions de contournement:

  • Mise à niveau vers MySQL Server 5.7 (qui accepte que SQL Dapper génère et renvoie les résultats attendus)
  • Comme vous l'avez dit, vérifiez si la collection est vide avant d'exécuter la requête

Une variante de vérification si la collection est vide (cela peut être utile si vous avez une requête complexe, NOT IN , etc.):

  var numsSql = nums.Any() ? "@Nums" : "(select null)";
  var query = $"select * from MyTable where someNumber in {numsSql};";
  conn.Query(query, new { Nums });



Sous licence: CC-BY-SA with attribution
Non affilié à Stack Overflow
Est-ce KB légal? Oui, apprenez pourquoi
Sous licence: CC-BY-SA with attribution
Non affilié à Stack Overflow
Est-ce KB légal? Oui, apprenez pourquoi