Contenuti

Dapper: Utilizzare list o array come parametri nelle query

Dapper: Utilizzare list o array come parametri nelle query

Utilizzo Dapper ogni volta che posso sia con SQL Server che con MYSql e l’idea di scrivere questo post mi e’ venuta ieri durante lo sviluppo di una console app per estrarre una serie di valori dal database.

Con dapper usare il parametro singolo e’ semplice. Vi siete mai chiesti come comportarvi nel caso di dovere applicare un filtro se i valori vi arrivano da un array oppure List?

Una prima soluzione potrebbe essere quella di creare una variabile temporanea dove mettere uno dopo l’altro i valori e costruire dinamicamente la parte IN della query. Secondo voi e’ cosi che si risolve? Ovviamente no!

Il codice che segue non e’ scritto per il post. Si tratta del codice scritto nella console app sviluppata per il cliente su cui lavoro. La sola modifica effettuata prima di postarlo e’ nascondere i nomi originali.

Nuget Dapper

Se non avete ancora dapper all’interno del vostro progetto vi bastera’ aprire il Package Manager e digitare

1
Install-Package Dapper 

Query SQL

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
private string _sql = @"
SELECT c.*
FROM 
    [Customers] c
    [...]
WHERE 
    [...]
    AND ( c.Years IN @years )
	AND ( c.LanguagePref IN @languages)
";

Dapper: WHERE condition IN

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
public IEnumerable<ResultDTO> EnsureData(string[] languages, int[] years)
{
    using (var connection = new SqlConnection(_databaseDTO.ConnectionString))
    {
        var items = connection.Query<ResultDTO>(_sql, 
            new { 
                LanguagePref = languages, 
                Years = years , 
            }
        );

        return items;
    }

}

Nulla di piu’ semplice, vero?