34

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

"SELECT * FROM Office WHERE OfficeId IN @Ids"

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

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 源以适用于我的场景,但如果有人知道一个更简单和优雅的解决方案,我会很高兴!

4

1 回答 1

33

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

按对象(以前有效):

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

或者,单名:

values.Add("ids", list);

或者,作为字典:

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

我还没有部署到 NuGet。让我知道这是否有问题。

于 2012-10-04T09:31:52.303 回答