C # Dapper-Abfrage mit WHERE IN

c# dapper

Frage

Ich versuche, eine adrette Abfrage wie folgt auszuführen:

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

Und ich bekomme einen MySql-Syntaxfehler, wenn nums leer ist. Es sieht so aus, als ob Dapper die Abfrage so aussehen würde: WHERE 1 = 0) also rate ich die linke (fehlt, was den Syntaxfehler verursacht. Ja, ich weiß, ich könnte einfach überprüfen, ob die Sammlung leer ist, bevor sie ausgeführt wird die Abfrage, aber ich möchte lieber nicht, wenn ich nicht muss.

Akzeptierte Antwort

Dies ist ein Fehler in Dapper, wo er eine SQL-Anweisung erstellt, die für MySQL Server 5.6 (und früher) ungültig ist.

Problemumgehungen:

  • Upgrade auf MySQL Server 5.7 (akzeptiert den SQL-Dapper und gibt die erwarteten Ergebnisse zurück)
  • Wie Sie gesagt haben, überprüfen Sie, ob die Sammlung leer ist, bevor Sie die Abfrage ausführen

Eine Variante, um zu prüfen, ob die Sammlung leer ist (das kann nützlich sein, wenn Sie eine komplexe Abfrage haben, NOT IN usw.):

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


Lizenziert unter: CC-BY-SA with attribution
Nicht verbunden mit Stack Overflow
Ist diese KB legal? Ja, lerne warum
Lizenziert unter: CC-BY-SA with attribution
Nicht verbunden mit Stack Overflow
Ist diese KB legal? Ja, lerne warum