Dapper.NET Extensions de liste


Exemple

Un scénario courant dans les requêtes de base de données est IN (...) où la liste est générée au moment de l'exécution. La plupart des SGBDR ne possèdent pas une bonne métaphore pour cela - et il n’existe pas de solution universelle de RDBMS pour cela. Au lieu de cela, Dapper fournit une extension automatique des commandes en douceur. Tout ce qui est nécessaire est une valeur de paramètre fournie qui est IEnumerable . Une commande impliquant @foo est étendue à (@foo0,@foo1,@foo2,@foo3) (pour une séquence de 4 éléments). L'utilisation la plus courante serait IN :

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

Cela se développe ensuite automatiquement pour émettre le code SQL approprié pour l'extraction à plusieurs lignes:

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

les paramètres @orderIds0 etc. étant ajoutés en tant que valeurs extraites de l'array. Notez que le fait qu'il ne soit pas valide à l'origine est intentionnel, pour garantir que cette fonctionnalité n'est pas utilisée par erreur. Cette fonctionnalité fonctionne également correctement avec l'indicateur de requête OPTIMIZE FOR / UNKNOWN dans SQL Server; si tu utilises:

option (optimize for
    (@orderIds unknown))

il étendra ceci correctement à:

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