Отображение 4 таблиц в один объект в Dapper - PullRequest
0 голосов
/ 02 апреля 2012

У меня быстрый вопрос о Даппере.У меня есть запрос, который возвращает 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. все имеют значение null.

Я не хочу использовать Union, чтобы получить все поля в одной таблице.

1 Ответ

2 голосов
/ 14 апреля 2012

Этого можно добиться, передав методу подключения 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 (:).Вам нужно будет заменить это эквивалентом для вашей БД.

Надеюсь, это полезно.

...