回答

收藏

Dapper多个连接的映射SQL查询

技术问答 技术问答 162 人阅读 | 0 人回复 | 2023-09-14

我想将复杂的对象映射到两个内部连接查询的简化结果中。我知道我们已经解决了映射内部连接的解决方案,但我想映射两个内部连接的结果。
" o6 x) Z) E+ _) I8 m: J这是场景:5 O, G% z- m2 k* E$ P$ G, I
我的课程是:
- U3 ^% Q; x" u1 |9 g1 @public class Order    public int id { get; set;    public string order_reference { get; set;    public string order_status { get; set;    public List 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 OrderLineSizes { get; set; }}public class OrderLineSize{    public int id { get; set;    public int order_line_id { get; set;    public string size_name { get; set; }}订单将OrderLines并将作为列表OrderLine作为OrderLineSizes作为列表。
0 y  W: W& L7 P2 G7 J
现在,这是我想要的List使用正确数据填充查询的基础:
" Q) k! f8 N3 G8 K1 P; m) wSELECT *FROM orders_mstr oINNER JOIN order_lines ol ON o.id = ol.order_idINNER JOIN order_line_size_relations ols ON ol.id = ols.order_line_id到目前为止,我已经尝试过这! O( ^2 j' H) ?/ O. ~- X/ w. O2 R
orderDetail = o);                                                                                                      if (orderDetail.OrderLines == null)                        orderDetail.OrderLines = new List();;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;orderDetail.OrderLines.Add(ol);                    return orderDetail;           .AsQueryable();;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;var resultList = lookup.Values;orderDetail = o);                    }                    if (orderDetail.OrderLines == null)                        orderDetail.OrderLines = new List();                    orderDetail.OrderLines.Add(ol);                    return orderDetail;                }).AsQueryable();            var resultList = lookup.Values;我可以成功地使用这种方法OrderLine映射订单对象,但我也想填写正确的数据OrderLineSizes。
3 y. H" W3 C" T9 R* {8 ]                                                               
0 \5 f/ h3 C. h3 r& f  ~" U- d0 \1 _: x    解决方案:                                                               
  u( g* p2 Q+ [7 m; M, L9 {                                                                我尽力解决。
" d) I" S2 q3 P* q这是根据我的更简单,更准确的解决方案:0 l2 I$ `2 J( {) I; V, ?8 i
var lookup = new Dictionary<i>();;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;var lookup2 = new Dictionary<i>();;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;connection.Query(@&quot;                    SELECT o.*,ol.*,ols.*                    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                               &quot;,(o,ol,ols) =>                                                   OrderDetail orderDetail;                if (!lookup.TryGetValue(o.id,out orderDetail))                                                           lookup.Add(o.id,orderDetail = o);                                                         OrderLine orderLine;                if (!lookup2.TryGetValue(ol.id,out orderLine))                                                           lookup2.Add(ol.id,orderLine = ol);                    orderDetail.OrderLines.Add(orderLine);                                                         orderLine.OrderLineSizes.Add(ols);                return orderDetail;        ).AsQueryable();;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;var resultList = lookup.Values.ToList();;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
分享到:
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则