C # WHERE IN을 사용하는 더 복잡한 쿼리

c# dapper

문제

다음과 같이 더 질 좋은 쿼리를 수행하려고합니다.

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

그리고 nums가 비어 있으면 MySql 구문 오류가 발생합니다. Dapper가 다음과 같이 조회를 변경하는 것처럼 보입니다 : WHERE 1 = 0) 그래서 왼쪽으로 추측하고 있습니다 (누락되어 구문 오류가 발생합니다.) 예, 실행하기 전에 콜렉션이 비어 있는지 확인할 수 있습니다. 쿼리,하지만 만약 내가하지 않아도 오히려 않을 것입니다.

수락 된 답변

이것은 Dapper버그로 MySQL 서버 5.6 이전 버전에서는 유효하지 않은 SQL 문을 생성합니다.

해결 방법 :

  • MySQL Server 5.7로 업그레이드 (SQL Dapper를 받아 들여 예상 결과를 생성하고 반환)
  • 앞에서 말한 것처럼 쿼리를 실행하기 전에 콜렉션이 비어 있는지 확인하십시오

컬렉션이 비어 있는지 확인하는 변형입니다 (복잡한 쿼리가있는 경우 유용 할 수 있음, NOT IN 등).

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


아래 라이선스: CC-BY-SA with attribution
와 제휴하지 않음 Stack Overflow
이 KB는 합법적입니까? 예, 이유를 알아보십시오.
아래 라이선스: CC-BY-SA with attribution
와 제휴하지 않음 Stack Overflow
이 KB는 합법적입니까? 예, 이유를 알아보십시오.