首页 > 解决方案 > 关系总和小于属性的 EF Core 查询

问题描述

我必须上课,一类是产品类,另一类是跟踪订单。两者都存储在数据库中,我使用 ef core 作为 orm。

public class Product
{
    public int Id { get; set; }
    public int AvailableQuantity { get; set; }
    public ICollection<Order> Orders { get; set; }
}

public class Order
{
    public int Id { get; set; }
    public bool Confirmed { get; set; }
    public int Quantity { get; set; }
    public int ProductId { get; set; }
    public Product Product { get; set; }
}

现在我需要获取总和Order.Quantity小于Product.AvailableQuantityOrder.Confirmed属性为真的所有产品。

我已经试过了

_context.Products.Where(product => product.Orders.Where(order => order.Confirmed).Sum(order => order.Quantity) < product.AvailableQuantity)

但这显然没有用。我猜我需要一些东西GroupBy,但我不知道如何让这个查询工作。另外我不想AsEnumerable在内存中使用和执行查询,因为我的数据库很大。

标签: c#linqentity-framework-corelinq-to-entities

解决方案


_context.Orders.Where(c => c.Confirmed).AsQueryable().GroupBy(c => c.ProductId)
               .Where(c => c.Sum(d => d.Quantity) < c.First().Product.AvailableQuantity)
               .ToDictionary(c => c.Key, c => c);

你的意思是这样的吗?


推荐阅读