Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

244
Vistas
¿Cómo agrego múltiples "WHERE conditionA OR conditionB OR conditionC" en el parámetro SQL?

Estoy haciendo paginación. Lo que tengo ahora es:

 public void GetAllDevices(int siteId, List<int> deviceTypes, int rowsOffset, int pageSize) { var param = new { SiteId = siteId, RowsOffset = rowsOffset, PageSize = pageSize }; string sqlQuery = @"SELECT * FROM device WHERE site_id = @SiteId ORDER BY site_id OFFSET @RowsOffset ROWS FETCH NEXT @PageSize ROWS ONLY"; var response = await conn.QueryAsync<Model.Device>(sqlQuery, param); }

Todas las cosas bastante estándar. Ahora, el usuario también puede filtrar muchas veces según el tipo de dispositivo, por lo que si voy a escribir SQL sin procesar, se vería así:

 SELECT * FROM device WHERE site_id = @SiteId WHERE device_type_id = 1 OR device_type_id = 2 OR device_type_id = 3 ORDER BY site_id OFFSET @RowsOffset ROWS FETCH NEXT @PageSize ROWS ONLY

Mi problema es ¿cómo escribo el parámetro de la cláusula WHERE? que agrego aqui:

 var param = new { SiteId = siteId, RowsOffset = rowsOffset, PageSize = pageSize };

Estoy usando Dapper y PostgreSQL 13, ejecutándome en .NET5.

Información adicional: vea la respuesta aceptada sobre cómo hacer esto. Tenga en cuenta que funcionaría para SQL Server pero no para PostgreSQL. PostgreSQL no es compatible con "IN", por lo que debe hacer "ANY" en su lugar. Consulte: la consulta Dapper.net "where ... in" no funciona con PostgreSQL

over 4 years ago · Santiago Trujillo
1 Respuestas
Responde la pregunta

0

Simplemente usa más parámetros:

 SELECT * FROM device WHERE site_id = @SiteId AND (device_type_id = @DeviceTypeID1 OR device_type_id = @DeviceTypeID2 OR device_type_id = @DeviceTypeID3) ORDER BY site_id OFFSET @RowsOffset ROWS FETCH NEXT @PageSize ROWS ONLY var param = new { SiteId = siteId, RowsOffset = rowsOffset, PageSize = pageSize, DeviceTypeID1 = deviceTypeID1, DeviceTypeID2 = deviceTypeID2, DeviceTypeID3 = deviceTypeID3 };

Esto supone los nombres de las variables que está utilizando para su entrada de usuario para el tipo de dispositivo. Es posible que necesite deconstruir eso de manera diferente según cómo esté recopilando la entrada del usuario. Es posible que deba construir dinámicamente la cadena SQL en función de sus estructuras de datos.

(Nota al margen: debe evitar usar SELECT * y más bien especificar específicamente las columnas que necesita en sus resultados)

Dado que está pasando List<int> para el tipo de dispositivo, puede reescribir su consulta usando IN y simplemente pasar la lista en un solo parámetro. Dapper le permite pasar un IEnumerable y hará el trabajo de construir la lista de variables por usted:

 SELECT * FROM device WHERE site_id = @SiteId AND device_type_id IN @DeviceTypeIDs ORDER BY site_id OFFSET @RowsOffset ROWS FETCH NEXT @PageSize ROWS ONLY var param = new { SiteId = siteId, RowsOffset = rowsOffset, PageSize = pageSize, DeviceTypeIDs = deviceTypes };
over 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda