我的 SQL 看起来像
Select TOP 3 o.OrderId,
o.Total,
od.Quantity,
od.ItemDescription,
os.OrderStatusDescription,
os.OrderStatusID
From dbo.Orders o
INNER JOIN dbo.OrderStatuses os ON os.OrderStatusID = o.OrderStatusID
INNER JOIN dbo.OrderDetails od ON od.OrderID = o.OrderID
Where o.CustomerId = 100 order by OrderDate desc;
我在 c# 端有我的课程,如下所示,我在 db 端也有三个表。我正在尝试查看是否可以使用 dapper 将 3 个表映射到一个对象 Order 而无需执行多个选择查询。我需要订单表中的前 3 行及其加载的子表。OrderDetail 对于 1 个 orderId 可以有 n 行。
如何使用 dapper 选择具有 1 次查找的嵌套对象?
class Order{
int OrderId {get;set;}
decimal Total {get;set;}
List<OrderDetail> Details {get;set;}
OrderStatus Status {get;set;}
}
class OrderDetail
{
int OrderLineId {get;set;}
int OrderId {get;set;}
string ItemDescription {get;set;}
int Quantity {get;set;}
}
class OrderStatus
{
int OrderStatusID {get;set;}
string OrderStatusDescription {get;set;}
}
这是我迄今为止尝试过但没有成功的方法
sqlConnection.Open();
IEnumerable orders = sqlConnection
.Query<Order>(
@"select Order.*, OrderDetail.*
from Order join OrderDetail
inner join on Order.OrderId = OrderDetail.OrderId
inner join on Order.OrderStatusID = OrderStatus.OrderId
and Order.CustomerId = 100",
(o, od, os) =>
{
o.Details = od; //this is a List<OrderDetail>
o.Status = os;
return o;
}); //