列表擴充套件

資料庫查詢中的常見場景是 IN (...),其中此處的列表是在執行時生成的。大多數 RDBMS 缺乏一個很好的比喻 - 並且沒有通用的跨 RDBMS 解決方案。相反,dapper 提供了一些溫和的自動命令擴充套件。所需要的只是提供的引數值,即 IEnumerable。涉及 @foo 的命令擴充套件為 (@foo0,@foo1,@foo2,@foo3)(對於 4 個專案的序列)。最常見的用法是 IN

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

然後,它會自動擴充套件以為多行提取發出適當的 SQL:

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

將引數 @orderIds0 等新增為從 arrray 獲取的值。請注意,它本身是無效的 SQL 最初是故意的,以確保不會錯誤地使用此功能。此功能也適用於 SQL Server 中的 OPTIMIZE FOR / UNKNOWN query-hint; 如果你使用:

option (optimize for
    (@orderIds unknown))

它會正確地擴充套件到:

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