- Dapper unterstützt nativ
IN()‑Abfragen, es ist nicht nötig, Komma‑getrennte Strings manuell zu bauen. - Regel: Übergebe als Parameter ein Array oder eine List‑Sammlung, Dapper expandiert es automatisch zur IN‑Bedingung.
- Feste SQL‑Schreibweise:
WHERE Id IN @ids, füge keine zusätzlichen Klammern hinzu. Falsch:IN (@ids). - Vorteil: Vollständig parametrisiert, schützt vor SQL‑Injektionen.
Beispiel
using System.Data;
using MySql.Data.MySqlClient;
using Dapper;
using System.Configuration;
using System.Collections.Generic;
static void Main(string[] args)
{
var connStr = ConfigurationManager.ConnectionStrings["StudentConnection"].ConnectionString;
using (IDbConnection db = new MySqlConnection(connStr))
{
string sql = "SELECT * FROM student WHERE Id IN @ids";
// Unterstützt int[]‑Array / List<int>
int[] idArray = {3,4};
List<Student> studentList = db.Query<Student>(
sql,
new { ids = idArray }
).ToList();
}
}Code-Sprache: JavaScript (javascript)
Beide Parameter‑Varianten funktionieren
// Variante 1: Array (Originalbeispiel)
new { ids = new int[] {3,4} }
// Variante 2: List‑Sammlung (häufiger in Projekten)
new { ids = new List<int> {3,4,5} }Code-Sprache: PHP (php)
Massen‑Löschung Delete
string sqlDelete = "DELETE FROM student WHERE Id IN @ids";
int rows = db.Execute(sqlDelete, new { ids = new int[]{2,5} });Code-Sprache: JavaScript (javascript)
Mehrfachbedingte IN‑Abfrage
string sql = "SELECT * FROM student WHERE Id IN @ids AND Email IN @emails";
var param = new
{
ids = new int[]{1,2},
emails = new string[]{"a@gmail.com","b@gmail.com"}
};
var list = db.Query<Student>(sql, param).ToList();Code-Sprache: PHP (php)
IN‑Abfrage
Previous: Gespeicherte Prozeduren mit Dapper