【发布时间】:2017-10-13 21:30:01
【问题描述】:
我想将复杂对象映射到具有两个内部连接的查询的简洁结果。我知道我们有映射一个内连接的解决方案,但我想映射两个内连接结果。
这里是场景:
我的课程是:
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 有 OrderLines 作为 List 和 OrderLine 作为 OrderLineSizes 作为 List。
现在,这是我的查询基础,我想用正确的数据填充 List<Order>:
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
这是我目前尝试过的:
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;
使用它,我可以成功地使用 OrderLine 映射订单对象,但我还想用正确的数据填充 OrderLineSizes。
【问题讨论】: