有办法做到这样的事情吗?假设我有两个类:

public class Class_A
{
  public string Name {get;}
  public string Age  {get;}
  public int    Key  {get;}
}
public class Class_B
{
  public string Doors {get;}
  public string Windows  {get;}
  public int    Key  {get;}
}

然后是这样的组合类:

public class Class_C
{
  public Class_A CA {get;}
  public Class_B CB {get;}
}

现在假设我在说

_connection.Query<Class_C>("A SQL that returns results from JOIN of Clas_A and Class_B")

因此,它将能够somehow个知道要映射到什么领域. 因为否则我必须像这样再次复制粘贴Class_C中这两个类的字段:

public class Class_C
{
      public string Name {get;}
      public string Age  {get;}
      public string Doors {get;}
      public string Windows {get;}
}

推荐答案

按照您的 comments ,为了删除所有冗余,您可以将PropertyB添加到类A,并让Dapper将该属性绑定到您的查询结果.

public class A
{
    public string Name { get; set; }
    public string Age { get; set; }
    public int Key { get; set; }
    public B PropertyB { get; set; }
}

public class B
{
    public string Doors { get; set; }
    public string Windows { get; set; }
    public int Key { get; set; }
}

问题是:

SELECT * FROM A INNER JOIN B ON A.[Key] = B.[Key];

结果是按照顺序Name, Age, Key, Doors, Windows, Key的字段.

所以如果你除以Doors:

  • 左边的组是A(Name, Age, Key)
  • 右边的组是B(Doors, Windows, Key).
var results = connection.Query<A, B, A>(
        sql,
        (a, b) =>
        {
            a.PropertyB = b;
            return a;
        },
        splitOn: "Doors")
    .Distinct()
    .ToList();

Query<A, B, A>意味着左是类型A,右是类型B,组合结果是由上述函数生成的A.

有关更多信息,请参阅文档Dapper Multi-Mapping Result.支持One-To-One映射和One-to-Many.

Csharp相关问答推荐

VS Code - C# - dotnet run找不到文件,但我可以打开并编辑它们吗?

无法更改或使用C#(WinForms.NET)中的全局变量

是否可以将gltf转换为字节数组,然后将字节数组转换回文件?

为什么.Equals(SS,StringComparison. ClientCultureIgnoreCase)在Net 4.8和6.0之间不同?

如何使用C#中的图形API更新用户配置文件图像

如何创建ASP.NET Core主机并在同一进程中运行请求

安装附加的. exe与Visual Studio

REST API端点中异步后台代码执行的类型

Appsettings.json未加载.Net 8 Blaazor Web程序集

如何使用XmlSerializer序列化带有CDATA节的XML文件?

Automapper 12.x将GUID映射到字符串

在C#中,将两个哈希集连接在一起的时间复杂度是多少?

EF核心区分大小写的主键

在DoubleClick上交换DataGridViewImageColumn的图像和工具提示

将操作从编辑页重定向到带参数的索引页

获取混淆&Quot;模糊引用&Quot;错误

JSON串行化程序问题.SQLite中的空值

错误:此版本的Visual Studio无法打开以下项目

嵌套Blazor组件内的验证

如何处理ASP.NET Core中包含两个构造函数的控制器?