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 关注
- 1279 浏览
添加回答
举报