Я использую .Net Core 2.0 и EF Core.Следующий запрос работает нормально, но не включает дочерние элементы.
Этот запрос выполняет объединение:
- Order
- OrderItem и
- Продукт
Умножив количество (в OrderItem) на цену (в продукте) и выполнив сумму, я получу сумму заказа.
Теперь я пытаюсь включить "OrderItem" и "Product", как я хотел бы видеть в окончательном JSON моего веб-API.Таким образом, получение окончательного JSON со всеми тремя сущностями и итоговой суммой общей стоимости заказа.
Это мой репозиторий:
public class OrderRepository : IOrderRepository
{
private readonly BasketDbContext _basketDbContext;
public OrderRepository(BasketDbContext basketDbContext)
{
_basketDbContext = basketDbContext;
}
public Order GetOrderById(int id)
{
return (from o in _basketDbContext.Orders
join oi in _basketDbContext.OrderItems on new { o.Id } equals new { Id = oi.OrderId }
join p in _basketDbContext.Products on new { oi.ProductId } equals new { ProductId = p.Id }
where o.Id == id
group new { o, p, oi } by new
{
o.Id,
o.OrderDate
}
into g
select new Order
{
Id = g.Key.Id,
OrderDate = g.Key.OrderDate,
TotalPrice = g.Sum(p => p.p.Price * p.oi.Quantity)
})
.Include(x => x.OrderItems)
.ThenInclude(y => y.Product)
.FirstOrDefault();
}
}
Включения в методе GetOrderById не работают,но я не знаю, как включить их в такой запрос.
Это мои модели:
public class Order
{
public int Id { get; set; }
public DateTime OrderDate { get; set; }
public decimal TotalPrice { get; set; }
public List<OrderItem> OrderItems { get; set; }
public decimal CalculateTotal()
{
return OrderItems.Sum(item => item.GetPrice());
}
}
public class OrderItem
{
public int Id { get; set; }
[Required(ErrorMessage = "Empty OrderId")]
public int OrderId { get; set; }
[Required(ErrorMessage = "Empty ProductId")]
public int ProductId { get; set; }
[Required(ErrorMessage = "Empty Quantity")]
[Range(1, 20, ErrorMessage = "Quantity must be between 1 to 20")]
public int Quantity { get; set; }
public Product Product { get; set; }
public decimal GetPrice()
{
return Product.Price * Quantity;
}
}
public class Product
{
public int Id { get; set; }
public string Name { get; set; }
public string Description { get; set; }
public decimal Price { get; set; }
}
Спасибо!