- 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 쿼리
Previous: Dapper 저장 프로시저
Next: 다중 구문 작업