2012-04-02 83 views
0

一个Object我有小巧玲珑的一个快速的问题。我有一个查询返回4个表。映射表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

你能告诉我们一些代码?这使得它更容易帮助。 – Alex 2012-04-02 06:38:57

回答

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数据库(:)。您需要将其替换为数据库的等效项。

希望这是有益的。