我有一个关于Dapper的快速问题。我有一个返回4个表的查询。
三个表只有一个整数列。称它们为field1,field2和field3。
第4张表有5栏说: A,B,C,d,E
我创建了一个名为ResultSet
的对象,其中包含4个表中的所有字段
public class ResultSet
{
int field1;
int field2;
int field3;
string A;
string B;
string C;
string D;
string E
}
如何将结果映射到ResultSet
对象?
目前我正在使用QueryMultiple
来获得所需的结果。但它只映射了前3列。 A,B,C,D和E均为空。
我不想使用联盟将所有字段放在一个表中。
答案 0 :(得分:2)
您应该能够通过将connection.Query扩展方法交给适当的参数化SQL语句来实现此目的,并将您的对象作为Type参数传递给它。
然后,Dapper会将您的查询神奇地映射到对象,假设您在选择列表中对项目进行了适当的别名(即,使用对象的相应属性名称对它们进行别名)。这些方面应该有效:
public class SomeObject
{
public int Field1 {get; set;}
public int Field2 {get; set;}
public int A {get; set;}
public int B {get; set;}
public int C {get; set;}
public int D {get; set;}
}
using(var connection = SomeConnectionFactory.GetConnection())
{
var yourObject =
connection.Query<SomeObject>("select tab1.someThing as Field1, " +
"tab2.someThing as Field2, " +
"tab4.onePotato as A, " +
"tab4.twoPotato as B, " +
"tab4.threePotato as C, " +
"tab4.four as D " +
"from someTable tab1 " +
"join someTable2 tab2 on tab1.Id = tab2.Id " +
"$$ etc etc for the other joins $$" +
"where tab1.Id = :ID " + ,new {ID = someId});
};
需要注意的是,我已经将绑定变量语法用于Oracle数据库(:)。您需要将其替换为数据库的等效文件。
希望这很有用。