我有以下類別:選擇所有兒童
public class Order
{
public Order()
{
OrderItems = new List<OrderItem>();
}
public int Id { get; set; }
public string OrderName { get; set; }
public int OrderStatusId { get; set; }
public OrderStatus Status { get; set; }
public List<OrderItem> OrderItems { get; set; }
}
public class OrderItem
{
public int Id { get; set; }
public int OrderId { get; set; }
public string ProductName { get; set; }
}
public class OrderStatus
{
public int Id { get; set; }
public string Description { get; set; }
}
回訪我用這個方法單個訂單(它的任何評論也將是有益的):
Order GetOrder()
{
using (var con = GetConnection())
{
try
{
con.Open();
string query =
@"SELECT * FROM [Order] JOIN OrderStatus ON [Order].OrderStatusId = OrderStatus.Id WHERE [Order].Id =1;
SELECT * FROM OrderItem Where OrderId = 1";
using (var multi = con.QueryMultiple(query))
{
Order order = multi.Read<Order, OrderStatus, Order>
((ord, ordStat) => { ord.Status = ordStat; return ord; })
.FirstOrDefault();
order.OrderItems = multi.Read<OrderItem>().ToList();
return order;
}
}
catch (Exception ex)
{
return null;
}
}
}
我知道我可以在一個單獨的查詢中將所有我的訂單Id值選擇到一個集合中,並使用集合值作爲參數在foreach
循環中運行上述方法,但我不知道dapper是否具有更優雅的解決方案來返回所有訂單而不僅僅是一。
你能澄清一下訂單ID列表嗎?它沒有在問題中顯示,所以我不能評論; dapper * does *提供了一些技巧,例如列表/數組參數的'in'擴展,這可能很有用 - 但它依賴於上下文。另外,你應該參數化 –
@MarcGravell編輯,請告訴是否需要更多的信息 – Yoav