带有“动态”参数名称的IN语句的Dapper AddDynamicParams

时间:2012-10-04 09:08:57

标签: c# c#-4.0 dapper

我有这样简单的SQL字符串:

"SELECT * FROM Office WHERE OfficeId IN @Ids"

问题是@Ids名称是在编辑器中输入的,所以它可以是任何东西,我的问题是,如果我想传入,比如一个整数数组,它只适用于Dapper如果我使用:< / p>

var values = new DynamicParameters();
values.AddDynamicParams(new { Ids = new[] { 100, 101 } });

但是这需要我知道参数名称是Ids,而我的情况并非如此。

我可以在Dapper中使用“动态”名称设置“动态参数”,如下所示:

var values = new DynamicParameters();
values.Add("Ids", new[] { 100, 101 });

但是然后Dapper没有为每个值构造带有单独参数的IN (....) SQL。

有没有办法构建传递给AddDynamicParams的动态对象,但是在事先不知道名字的情况下设置成员名称和值?

我可以修改Dapper源以适应我的场景,但是如果有人知道一个更简单和优雅的解决方案,我会很高兴!

1 个答案:

答案 0 :(得分:23)

我刚刚向存储库提交了一个修补程序,它允许以下任何一项正常工作:

by object(之前有效):

values.AddDynamicParams(new { ids = list });

或者,用单一名称:

values.Add("ids", list);

或者,作为字典:

var args = new Dictionary<string, object>();
args.Add("ids", list);
values.AddDynamicParams(args);

我还没有部署到NuGet。如果这是一个问题,请告诉我。