使用Dapper映射超过5种类型

Chr*_*ers 15 c# sql dapper

我目前正在构建一个将12个表连接在一起的SELECT查询.我一直在使用Dapper进行所有其他查询,效果很好.问题是,泛型方法只需要五个通用参数.

我之前修改过代码以支持最多6个用于另一个查询,但现在我真的不认为我应该破解6个更多级别的泛型.

有没有办法将dapper传递给一个类型数组,并将结果作为一个对象数组返回,如果必须的话我可以手动编译?

我也可能以错误的方式接近问题!任何帮助将不胜感激!

小智 25

在我工作的一个项目中,我看到这样的东西可以映射超过7种类型.我们使用了Dapper 1.38:

connection.Query<TypeOfYourResult>
(
   queryString,
   new[]
   {
      typeof(TypeOfArgument1),
      typeof(TypeOfArgument2),
      ...,
      typeof(TypeOfArgumentN)
   },
   objects =>
   {
      TypeOfArgument1 arg1 = objects[0] as TypeOfArgument1;
      TypeOfArgument2 arg2 = objects[1] as TypeOfArgument2;
      ...
      TypeOfArgumentN argN = objects[N] as TypeOfArgumentN;

     // do your processing here, e.g. arg1.SomeField = arg2, etc.
     // also initialize your result

     var result = new TypeOfYourResult(...)

     return result;
   },
   parameters,
   splitOn: "arg1_ID,arg2_ID, ... ,argN_ID"
);
Run Code Online (Sandbox Code Playgroud)

queryString是不言自明的.splitOn参数说明Dapper应如何从SELECT语句中拆分列,以便可以将所有内容正确映射到对象, 您可以在此处阅读.

  • 将此标记为答案,因为它是最新的!3年前,这在我的用例中完美无缺!(时光飞逝!) (3认同)