Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

237
Views
¿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 answers
Answer question

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 Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!