You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用LINQ根据货架交易日志统计当前货架内有效箱子数量

货架有效箱子数统计LINQ正确实现方案

原代码错误原因

  • 分组逻辑错误:将Barcode和Event同时作为分组键,会把同一个条码的入库、出库记录拆分到两个不同分组,无法判断该条码的最新交易类型是入库还是出库
  • 过滤逻辑错误:直接统计所有入库事件的分组数量,没有排除「已存在出库记录且出库时间晚于最后一次入库时间」的条码

正确实现代码

var getTotal = await _context.RackBoxLogs
    // 过滤指定货架的所有交易记录
    .Where(c => c.RackId == rackId)
    // 按条码单独分组,同一个箱子的所有交易归入同一组
    .GroupBy(c => c.Barcode)
    // 取每个条码的最新一条交易记录
    .Select(g => g.OrderByDescending(c => c.DateTime).First())
    // 最新交易为入库的条码就是当前仍在货架上的箱子
    .Where(c => c.Event == "IN")
    // 统计数量即为有效箱子数
    .CountAsync();

注:如果你的实体类中交易时间字段名为CreatedOn,请将代码中的c.DateTime替换为c.CreatedOn

逻辑验证

对于你给出的测试数据,该逻辑会遍历每个条码的最新交易:

  • 条码ABC1235最新记录为IN,计数+1
  • 条码ABC1237最新记录为IN,计数+1
  • 其余条码最新记录为OUT,不计入
    最终统计结果为2,符合预期。

内容的提问来源于stack exchange,提问作者Azri Zakaria

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.06 10:27:01