2012-10-04 19 views
20

ho semplice stringa SQL come questo:AddDynamicParams Dapper per IN dichiarazione con "dinamico" nome del parametro

"SELECT * FROM Office WHERE OfficeId IN @Ids" 

la cosa è che viene immesso il nome @Ids in un editor quindi potrebbe essere qualsiasi altra cosa, e la mia problema è che se voglio passare in, diciamo un array di interi, funziona solo con Dapper se uso:

var values = new DynamicParameters(); 
values.AddDynamicParams(new { Ids = new[] { 100, 101 } }); 

Ma questo mi obbliga a sapere che il nome del parametro è Ids e che non è il caso in il mio scenario

posso impostare un "parametro dinamico" in Dapper con un nome "dinamica" come questo:

var values = new DynamicParameters(); 
values.Add("Ids", new[] { 100, 101 }); 

Ma poi Dapper non costruisce la IN (....) SQL con parametri distinti per ogni valore.

C'è un modo per costruire l'oggetto dinamico passato a AddDynamicParams ma impostando il nome membro e il valore senza conoscere il nome in anticipo?

Potrei modificare la sorgente di Dapper per funzionare per il mio scenario, ma se qualcuno sa di una soluzione più semplice ed elegante per questo sarei grato!

risposta

19

ho appena presentato una correzione al repository che permette a qualsiasi delle seguenti operazioni per funzionare correttamente:

per oggetto (questo ha funzionato in precedenza):

values.AddDynamicParams(new { ids = list }); 

o, per unico nome:

values.Add("ids", list); 

o, come un dizionario:

var args = new Dictionary<string, object>(); 
args.Add("ids", list); 
values.AddDynamicParams(args); 

Non ho ancora distribuito a NuGet. Fammi sapere se questo è un problema.

+0

Grazie mille Marc! Funziona come un fascino! Questo è il motivo per cui amo l'open source .. Lavoro superbo! –

+1

@Jaynard meh, puoi ottenere correzioni rapide sia in open-source che in closed-source. Per essere davvero un esempio del vantaggio di open-source, mi avresti inviato una richiesta di pull alla correzione: p –

+0

hehe è vero, e avevo appena iniziato a cercare il codice sorgente ma mi hai battuto per una frana ;) –

Problemi correlati