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

Jen*_*son 25 c# c#-4.0 dapper

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

"SELECT * FROM Office WHERE OfficeId IN @Ids"
Run Code Online (Sandbox Code Playgroud)

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

var values = new DynamicParameters();
values.AddDynamicParams(new { Ids = new[] { 100, 101 } });
Run Code Online (Sandbox Code Playgroud)

但这需要我知道参数名称是什么Ids,而在我的场景中并非如此.

我可以在Dapper中设置一个"动态参数",其名称为"动态",如下所示:

var values = new DynamicParameters();
values.Add("Ids", new[] { 100, 101 });
Run Code Online (Sandbox Code Playgroud)

但是,然后Dapper不IN (....)为每个值构造具有单独参数的SQL.

有没有办法构建传入的动态对象,AddDynamicParams但事先设置成员名称和值而不知道名称?

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

Mar*_*ell 25

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

按对象(这在以前工作):

values.AddDynamicParams(new { ids = list });
Run Code Online (Sandbox Code Playgroud)

或者,用单一名称:

values.Add("ids", list);
Run Code Online (Sandbox Code Playgroud)

或者,作为字典:

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

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

  • @Jaynard meh,您可以在开源和闭源中获得快速修复。要真正成为开源优势的示例,您应该向我发送修复请求;p (2认同)