IN‑Abfrage

  • 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

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert