IN 쿼리

  • Dapper는 기본적으로 IN() 쿼리를 지원하며 쉼표로 구분된 문자열을 직접 만들 필요가 없습니다.
  • 규칙: 배열 또는 List 컬렉션을 매개변수로 전달하면 Dapper가 자동으로 펼쳐 IN 조건을 생성합니다.
  • SQL 고정 문법: WHERE Id IN @ids, 괄호를 추가하지 마세요. 잘못된 예: IN (@ids).
  • 장점: 전체가 매개변수화되어 SQL 인젝션 위험을 차단합니다.

예시

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";

        // int[] 배열 / List<int> 지원
        int[] idArray = {3,4};
        List<Student> studentList = db.Query<Student>(
            sql,
            new { ids = idArray }
        ).ToList();
    }
}Code language: JavaScript (javascript)
두 가지 매개변수 방식 모두 사용 가능
// 방식1: 배열(원본 예제)
new { ids = new int[] {3,4} }

// 방식2: List 컬렉션(실제 프로젝트에서 자주 사용)
new { ids = new List<int> {3,4,5} }Code language: PHP (php)

대량 삭제 Delete

string sqlDelete = "DELETE FROM student WHERE Id IN @ids";
int rows = db.Execute(sqlDelete, new { ids = new int[]{2,5} });Code language: JavaScript (javascript)

다중 조건 IN 쿼리

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 language: PHP (php)

IN 쿼리

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다