3 回答

TA貢獻2021條經驗 獲得超8個贊
直接從GitHub項目主頁:
Dapper允許您傳遞IEnumerable并將自動參數化您的查詢。
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貢獻1862條經驗 獲得超7個贊
如果您的IN子句太大而無法處理MSSQL,則可以很輕松地在Dapper中使用TableValueParameter。
在MSSQL中創建TVP類型:
CREATE TYPE [dbo].[MyTVP] AS TABLE([ProviderId] [int] NOT NULL)
使用DataTable與TVP相同的列創建一個,并使用值填充它
var tvpTable = new DataTable();
tvpTable.Columns.Add(new DataColumn("ProviderId", typeof(int)));
// fill the data table however you wish
修改您的Dapper查詢以INNER JOIN在TVP表上執行以下操作:
var query = @"SELECT * FROM Providers P
INNER JOIN @tvp t ON p.ProviderId = t.ProviderId";
在Dapper查詢調用中傳遞DataTable
sqlConn.Query(query, new {tvp = tvpTable.AsTableValuedParameter("dbo.MyTVP")});
當您要對多個列進行批量更新時,這也非常有用-只需構建一個TVP并UPDATE使用內部連接到TVP。
- 3 回答
- 0 關注
- 1333 瀏覽
添加回答
舉報