使用Dapper映射到嵌套对象



我有一个对象,它有两个类列表。

public class Order
{
int order_id;
double amount;
List<order_item> order_items;
List<order_shipment> order_shipments;
}

以下是应该如何映射对象:

SELECT * FROM Orders o
INNER JOIN Order_Items i ON i.order_id = o.order_id
INNER JOIN Order_Shipments s ON s.order_id = o.order_id

有什么方法可以将上面的查询映射到嵌套类?

试试看:

var lookup = new Dictionary<int, Order>();
conn.Query<Order, order_item, order_shipment, Order>(@"
SELECT o.*,i.*,s.* FROM Orders o
INNER JOIN Order_Items i ON i.order_id = o.order_id
INNER JOIN Order_Shipments s ON s.order_id = o.order_id 
", (o, i, s) => {
Order order;

if (!lookup.TryGetValue(o.order_id, out order))
lookup.Add(o.order_id, order = o);

order.order_items = order.order_items ?? new List<order_item>();
order.order_items.Add(i);

order.order_shipments = order.order_shipments ?? new List<order_shipment>();
order.order_shipments.Add(s);

return order;
}).AsQueryable();

var result = lookup.Values;

请参阅:如何使用Dapper 映射嵌套对象的列表

更新:

感谢@Palle Due的指出。您还应该根据表的第一列添加splitOn参数,如下所示:(假设Order_Items的第一列是order_item_idOrder_Shipmentorder_shipment_id(

splitOn: "order_id, order_item_id, order_shipment_id"

请参阅:Dapper 中多重映射的正确使用

最新更新