首页 > 解决方案 > 计算 2 表 where 条件 - Linq

问题描述

我有 2 张桌子,

产品表

id  produk  batch   qty
1   AAA    ADADAD   2
2   BBB    ADADAD   2
3   BBB    AAAAAA   2
...............

并移动桌子,

id  produk  batch   qty
1   BBB     ADADAD  1

我想在 stok 表中的 qty 减去 move 表中的 qty 之后显示表,我想要什么表

PRODUK  BATCH   QTY
AAA     ADADAD  2
BBB     ADADAD  1
BBB     AAAAAA  2

这是我的查询

var obj = _db.produk
       .Groupby(a=> new {a.code,a.batch})
       .Select(a=> new {
          produk = a.key.code,
          batch = a.Key.batch,
          qty = _db.move.Where(c => a.Any(p => p.code == a.code && p.batch == a.batch)).Sum(a=>a.qty)
       }).tolist();

但不工作

标签: c#asp.net-mvclinqasp.net-core

解决方案


您必须对分组移动表执行 LEFT JOIN。

var moves =
  from m in _db.move
  group m by { m.code, m.batch } into g
  select
  {
      g.Key.code,
      g.Key.batch,
      qty = g.Sum(x => x.qty)
  };

var query = 
   from p in _db.produk
   join m in moves on new { p.code, p.batch } equals { m.code, m.batch } into j
   from m in j.DefaultIfEmpty()
   select new
   {
       produk = p.code,
       batch = p.batch.
       qty = p.qty - (int?)m.qty ?? 0
   };

推荐阅读