Dapper.NET Elenca espansioni

Esempio

Uno scenario comune nelle query di database è IN (...) dove l'elenco qui viene generato in fase di esecuzione. La maggior parte degli RDBMS non ha una buona metafora per questo - e per questo non esiste una soluzione cross-RDBMS universale. Invece, dapper offre una leggera espansione automatica dei comandi. Tutto ciò che è richiesto è un valore di parametro fornito che è IEnumerable . Un comando che coinvolge @foo viene esteso a (@foo0,@foo1,@foo2,@foo3) (per una sequenza di 4 elementi). L'uso più comune di questo sarebbe IN :

int[] orderIds = ...
var orders = connection.Query<Order>(@"
select *
from Orders
where Id in @orderIds", new { orderIds });

Questo quindi si espande automaticamente per emettere il codice SQL appropriato per il recupero di più righe:

select *
from Orders
where Id in (@orderIds0, @orderIds1, @orderIds2, @orderIds3)

con i parametri @orderIds0 ecc vengono aggiunti come valori presi da arrray. Si noti che il fatto che SQL non sia originariamente valido è intenzionale, per garantire che questa funzione non venga utilizzata per errore. Questa funzionalità funziona anche correttamente con OPTIMIZE FOR / UNKNOWN query-hint in SQL Server; se usi:

option (optimize for
    (@orderIds unknown))

lo espanderà correttamente per:

option (optimize for
    (@orderIds0 unknown, @orderIds1 unknown, @orderIds2 unknown, @orderIds3 unknown))