Dapper sql Запрос с объединениями, который идет после 7 - PullRequest
0 голосов
/ 28 августа 2018

У меня есть запрос, который требует около 9 объектов, поступающих из объединений.

select
 :
  fields
 :
from tbl1 t1
join tbl2 t2 on t2.id = t1.id
join tbl3 t3 on t3.id = t1.id
join tbl4 t4 on t4.id = t1.id
join tbl5 t5 on t5.id = t1.id
join tbl6 t6 on t6.id = t1.id
left outer join tbl7 on t7.id = t1.id
left outer join tbl8 on t8.id = t6.id
left outer join tbl9 on t9.id = t1.id
left outer joint tbl10 on t10.id = t9.id
    where ... 

И будет выполнять как обычно

db.Query<poco1, poco2,.... poco10, poco1>(query, (poco1, poco2,.... poco10) => {

   return ..stuffs
}).ToList()

Проблема в том, что запрос принимает только 7. Интересно, что было бы другим вариантом, чтобы получить все эти объекты (9) одним запросом. Если я собираюсь использовать хранимый процесс, как мне сопоставить данные с его объектами?

1010 * редактировать * TBL представляет собой poco, но внес изменения, чтобы было ясно, что они poco

Ответы [ 2 ]

0 голосов
/ 29 августа 2018

Давайте добавим несколько полей в этот запрос (и мы собираемся поместить его в строку с именем queryString):

select
   t1.FooStr
   t2.BarInt
   t3.QuuzDate
   t4.IsAFoo
   t5.And
   t6.So
   t7.On
from tbl1 t1
join tbl2 t2 on t2.id = t1.id
join tbl3 t3 on t3.id = t1.id
join tbl4 t4 on t4.id = t1.id
join tbl5 t5 on t5.id = t1.id
join tbl6 t6 on t6.id = t1.id
left outer join tbl7 on t7.id = t1.id
left outer join tbl8 on t8.id = t6.id
left outer join tbl9 on t9.id = t1.id
left outer joint tbl10 on t10.id = t9.id
where ... 

Затем создайте класс, подобный:

  public class SomeType
  {
      public string FooStr { get; set; }
      public int BarInt { get; set; }
      public DateTime  QuuzDate { get; set; }
      public bool IsAFoo { get; set; }
      public string And { get; set; }
      public string So { get; set; }
      public string On { get; set; }
  }

Ваш запрос будет выглядеть так:

var results = myConnection.Query<SomeType>(queryString);

если ваше предложение where выглядело так:

where t1.FooStr = @Name and t2.BarInt > @MinVal

тогда запрос будет выглядеть так:

var results = myConnection.Query<SomeType>(queryString, new {Name = "Flydog", MinVal = 10});

Класс POCO не имеет ничего общего с таблицами в запросе, он определяется тем, как выглядит набор результатов запроса.

0 голосов
/ 28 августа 2018

Подпись, которую вы ищете,

 public static IEnumerable<TReturn> Query<TReturn>(this IDbConnection cnn, string sql, Type[] types, Func<object[], TReturn> map, object param = null, IDbTransaction transaction = null, bool buffered = true, string splitOn = "Id", int? commandTimeout = null, CommandType? commandType = null)

Позволяет более 7 типов.

...