Combinaciones de Where Criteria - Aún consulta parametrizada - Dapper

c#-4.0 dapper tsql

Pregunta

Tengo una consulta Dapper de la siguiente manera

Public void GetAllCusomers(string CustmoerId, StringFirstName, String LastName, String Gender)
    {
        TblCustomer tblCustomer  = new TblCustomer();

        using (var sqlConnection = new SqlConnection(“DatabaseConncetionString"))
        {
            sqlConnection.Open();
            //tblCustomer = sqlConnection.Query<TblCustomer >("SELECT *  FROM tblCustomer WHERE CustomerId = @CustomerID" AND FirstName = @FirstName……………, new { CustomerID = CustomerId,……………. }).ToList(); 
            tblCustomer = sqlConnection.Query<TblCustomer >("SELECT *  FROM tblCustomer WHERE CustomerId = @CustomerID", new { CustomerID = CustomerId }).ToList();
            sqlConnection.Close();
        }
}

La pregunta es ¿cómo construir la consulta? En el método anterior, el usuario puede proporcionar valor a cualquier parámetro que desee consultar. Si el valor del parámetro está en blanco, no se usará en los criterios WHERE. Utilizaré todos los parámetros suministrados en los criterios where con operaciones AND.

Sin Dapper, es fácil construir la consulta dinámica al concatenar la instrucción SQL en función de los parámetros proporcionados. Cómo construir estas consultas en Dapper sin comprometer la función parametrizada.

Gracias, Ganesh

Respuesta popular

Lo haría de forma similar a cómo crea una consulta dinámica. Cree su cadena de forma dinámica (según la entrada del usuario), solo incluya filtros en la cláusula Where según sea necesario. Exmpale:

var query = new StringBuilder("select * from users where ");

if(!string.IsNullOrEmpty(firstname)) query.Append("FirstName = @FirstName ");

En cuanto a pasar los parámetros, puede construir un objeto que incluya todos sus parámetros posibles con valores para pasar:

new {FirstName = "John", LastName = "Doe"}

o, si solo desea pasar los parámetros que realmente se usarán, puede compilar un Dictionary<string,object> que contenga solo aquellos parámetros que debe ingresar:

new Dictionary<string,object> { {"FirstName", "John" } }


Licencia bajo: CC-BY-SA with attribution
No afiliado con Stack Overflow
¿Es esto KB legal? Sí, aprende por qué
Licencia bajo: CC-BY-SA with attribution
No afiliado con Stack Overflow
¿Es esto KB legal? Sí, aprende por qué