複雑なオブジェクトを2つの内部結合を持つクエリの結果にマップしたいとします。 1つの内部結合をマッピングするソリューションがあることはわかっていますが、2つの内部結合をマッピングする必要があります。ここでDapper map multiple joins Sqlクエリ
はシナリオです:
私のクラスは以下のとおりです。
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; }
}
注文はリストとしてOrderLineSizesとして一覧やオーダーラインとして注文ラインを持っています。
さて、ここでは私のクエリベースは、私が正しいデータで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にも正しいデータを設定したいと思います。
OrderDetailは基本的にオーダークラス – Saadi
です。 –