I want to map complex object to dapper result from query which has two inner joins. I know we've solution to map one inner join but I want to map two inner joins result.
Here is the Scenario:
My Classes are:
public class Order { public int id { get; set; } public string order_reference { get; set; } public string order_status { get; set; } public List<OrderLine> OrderLines { get; set; } } public class OrderLine { public int id { get; set; } public int order_id { get; set; } public string product_number { get; set; } public List<OrderLineSize> OrderLineSizes { get; set; } } public class OrderLineSize { public int id { get; set; } public int order_line_id { get; set; } public string size_name { get; set; } } Order has OrderLines as List and OrderLine as OrderLineSizes as List.
Now, Here is my query base on that I want to populate List<Order> with correct data:
SELECT * FROM orders_mstr o INNER JOIN order_lines ol ON o.id = ol.order_id INNER JOIN order_line_size_relations ols ON ol.id = ols.order_line_id Here is what I tried so far:
var lookup = new Dictionary<int, Order>(); connection.Query<Order, OrderLine, Order>(@" SELECT o.*, ol.* FROM orders_mstr o INNER JOIN order_lines ol ON o.id = ol.order_id ", (o, ol) => { Order orderDetail; if (!lookup.TryGetValue(o.id, out orderDetail)) { lookup.Add(o.id, orderDetail = o); } if (orderDetail.OrderLines == null) orderDetail.OrderLines = new List<OrderLine>(); orderDetail.OrderLines.Add(ol); return orderDetail; }).AsQueryable(); var resultList = lookup.Values; Using this, I can successfully map order object with OrderLine but I want to populate OrderLineSizes as well with correct data.