SELECCIONAR * DESDE X DONDE id IN (...) con Dapper ORM

.net dapper sql

Pregunta

¿Cuál es la mejor manera de escribir una consulta con la cláusula IN utilizando Dapper ORM cuando la lista de valores para la cláusula IN proviene de lógica empresarial? Por ejemplo, digamos que tengo una consulta:

SELECT * 
  FROM SomeTable 
 WHERE id IN (commaSeparatedListOfIDs)

El commaSeparatedListOfIDs se transfiere desde la lógica de negocio y puede ser cualquier tipo de IEnumerable(of Integer) . ¿Cómo construiría una consulta en este caso? ¿Tengo que hacer lo que he estado haciendo hasta ahora, que es básicamente concatenación de cadenas o hay algún tipo de técnica avanzada de asignación de parámetros de la que no tengo conocimiento?

Respuesta aceptada

Dapper lo admite directamente. Por ejemplo...

string sql = "SELECT * FROM SomeTable WHERE id IN @ids"
var results = conn.Query(sql, new { ids = new[] { 1, 2, 3, 4, 5 }});

Respuesta popular

Directamente desde la página de inicio del proyecto GitHub :

Dapper le permite pasar IEnumerable y automáticamente parametrizará su consulta.

connection.Query<int>(
    @"select * 
      from (select 1 as Id union all select 2 union all select 3) as X 
      where Id in @Ids", 
    new { Ids = new int[] { 1, 2, 3 });

Será traducido a:

select * 
from (select 1 as Id union all select 2 union all select 3) as X 
where Id in (@Ids1, @Ids2, @Ids3)

// @Ids1 = 1 , @Ids2 = 2 , @Ids2 = 3


Licencia bajo: CC-BY-SA with attribution
No afiliado con Stack Overflow
Licencia bajo: CC-BY-SA with attribution
No afiliado con Stack Overflow