c# - 关系总和小于属性的 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.AvailableQuantity
且Order.Confirmed
属性为真的所有产品。
我已经试过了
_context.Products.Where(product => product.Orders.Where(order => order.Confirmed).Sum(order => order.Quantity) < product.AvailableQuantity)
但这显然没有用。我猜我需要一些东西GroupBy
,但我不知道如何让这个查询工作。另外我不想AsEnumerable
在内存中使用和执行查询,因为我的数据库很大。
解决方案
_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);
你的意思是这样的吗?
推荐阅读
- mac-app-store - 应用因“元数据中缺少条款和条件”而被拒绝
- symfony - 从ManyToMany获取最后一个值
- sql - 使用外部表的问题
- python - 有没有办法降低 cv2.VideoWriter 实时摄像机录制视频的比特率?
- python-3.x - RuntimeError:字典在迭代期间改变了大小,你能告诉我如何解决这个问题
- json - 一种查看reddit图像是否已被删除的方法
- python - 将两个数组之间的行匹配限制为特定列的值
- reactjs - Docker - npm 错误!enoent ENOENT:没有这样的文件或目录,打开 '/package.json' ----- /docker-entrypoint.sh: 38: exec: npm: not found
- drupal-8 - Drupal 8 上的缓存图像
- android - 如何在不发生重复类冲突的情况下混淆两个不同 `.aar` 的包名称?