У меня есть следующие классы:ВЫБРАТЬ все с детьми
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;
}
}
}
Я знаю, что я может выбрать все значения идентификаторов моих заказов в коллекции по отдельному запросу и запустить описанный выше метод в цикле foreach
, используя значения коллекции в качестве параметра, но мне интересно, имеет ли dapper более элегантное решение для возврата всех моих заказов, а не просто один.
Можете уточнить, где находится этот список идентификаторов заказа? он не отображается в вопросе, поэтому я не могу прокомментировать; dapper * does * предлагает некоторые трюки с 'in' расширениями параметров списка/массива, например, которые могут быть полезны, но это зависит от контекста. Кроме того, вы должны, вероятно, параметризовать, что отредактировано –
@MarcGravell, пожалуйста, сообщите, требуется ли дополнительная информация. – Yoav