Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

243
Visualizações
¿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 Respostas
Responde à pergunta

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 Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda