3 回答

TA貢獻(xiàn)2021條經(jīng)驗(yàn) 獲得超8個(gè)贊
直接從GitHub項(xiàng)目主頁:
Dapper允許您傳遞IEnumerable并將自動(dòng)參數(shù)化您的查詢。
connection.Query<int>(
@"select *
from (select 1 as Id union all select 2 union all select 3) as X
where Id in @Ids",
new { Ids = new int[] { 1, 2, 3 });
將被翻譯成:
select *
from (select 1 as Id union all select 2 union all select 3) as X
where Id in (@Ids1, @Ids2, @Ids3)
// @Ids1 = 1 , @Ids2 = 2 , @Ids2 = 3

TA貢獻(xiàn)1862條經(jīng)驗(yàn) 獲得超7個(gè)贊
如果您的IN子句太大而無法處理MSSQL,則可以很輕松地在Dapper中使用TableValueParameter。
在MSSQL中創(chuàng)建TVP類型:
CREATE TYPE [dbo].[MyTVP] AS TABLE([ProviderId] [int] NOT NULL)
使用DataTable與TVP相同的列創(chuàng)建一個(gè),并使用值填充它
var tvpTable = new DataTable();
tvpTable.Columns.Add(new DataColumn("ProviderId", typeof(int)));
// fill the data table however you wish
修改您的Dapper查詢以INNER JOIN在TVP表上執(zhí)行以下操作:
var query = @"SELECT * FROM Providers P
INNER JOIN @tvp t ON p.ProviderId = t.ProviderId";
在Dapper查詢調(diào)用中傳遞DataTable
sqlConn.Query(query, new {tvp = tvpTable.AsTableValuedParameter("dbo.MyTVP")});
當(dāng)您要對(duì)多個(gè)列進(jìn)行批量更新時(shí),這也非常有用-只需構(gòu)建一個(gè)TVP并UPDATE使用內(nèi)部連接到TVP。
- 3 回答
- 0 關(guān)注
- 1340 瀏覽
添加回答
舉報(bào)