表:WareHouse 为物品基础资料
goodsId // 物料编号
goodsName // 物品名称
goodsType // 物品型号(规格)
unit // 计量单位
表:InRecordTB 为入库记录(goodsId为多条)
Id // 入库ID
goodsId // 物料编号
inNumber // 入库数量
purchasePrice // 购入价
表:OutRecordTB 为出库记录(goodsId为多条)
Id // 出库ID
documentNumber // 单据编号
goodsId // 物料编号
outNumber // 出库数量
costPrice // 出库成本价
sellingPrice // 销售价
如何计算WareHouse中的物品对应的库存量?
我的做法inventoryQuantity不知什么做了
//WareHouses为物品的基础资料
//InRecordTBs为入库记录(goodsId为多条)
//OutRecordTBs为出库记录(goodsId为多条)
var resule = (from a in db_OA.WareHouses
join b in db_OA.InRecordTBs on a.goodsId equals b.goodsId
join c in db_OA.OutRecordTBs on a.goodsId equals c.goodsId
select new
{
goodsId = a.goodsId, //编号
goodsName = a.goodsName, //配件名称
goodsType = a.goodsType, //规格及型号
unit = a.unit, //单位
inventoryQuantity= ??? //库存量=入库总数-出库总(这里什么写呢?)
}).ToList();
Table A group by product, and sum of quantity
union all
table B group by product and sum of quanitity*-1
then group by product again and get sum of quantity
then join with product
then you will got product and inventoryQuantity
谢谢,但我没能悟出你写的,能否细说些呢?
@润物之音: 一般情况下,我不会在LINQ里面做这个事情,不过你要也行。
1、Table A: 入库, Table B:出库
第一步:Union All (SQL) var q1 = (from c in db.TableA select new {ProductID=c.ProductID, Quantity=C.Quantity}).concat (from d in db.TableB select new {ProductID=d.ProductID, Quantity=-1*d.Quantity}) 第二步: Group by and Sum (SQL) var q2= q1.groupBy(c=>c.ProductID) .Select(p=> new { ProductID=p.key, InventoryQuantity=sum(p.Quantity) }) 第三步: 取得Product的其他信息 var q3 = from c in q2 join d in db.ProductTable select new { ProductID=c.ProductID, InventoryQuantity=c.InventoryQuantity, Unit=d.Unit, .... }
@爱编程的大叔: 你是什么做?给个方向。谢谢
@润物之音: 好多方法的,你刚刚开始,随便能做出来就行了。
1、一般能不用UNION ALL这样的语句最好了,性能较差一些,但是某些情况下又必须用,一言难尽。
2、在前台写LINQ,SQL SERVER无法进行查询缓存,性能也较差一些,可以写成视图保存起来。
3、或者使用存储过程编写,这个性能应该更好一点点。
4、.... 我的建议还是循序渐进,现在说太多,你听见得太多,并没啥好处,反而绑住手脚了。
还是设计问题。增加一个库存表,压根就不需要这么复杂的查询。
你好!具体什么做请详解!能否加你的qq呢?我的191971159。期待你的指点!