首页 > 解决方案 > 来自不同表的两列的总和,如果辅助表没有任何数据,则应返回结果

问题描述

我有两个表:Tb_PurchaseProductDetail(主键:id),tb_productstockupdate(外键:PurchaseProductId(与 Tb_PurchaseProductDetail 表主键有关系))。现在我想要关系()中 Tb_PurchaseProductDetail 表的两列值和 tb_productstockupdate 表的一列的总和。如果 tb_productstockupdate 表中存在任何单行但如果 tb_productstockupdate 表中没有可用数据,则下面的查询会给出正确的数据,而不是从主表返回数据。

我期望如果辅助表中不存在数据,至少它应该基于主表返回数据。

s.tb_productstockupdate.Sum(d => d.StockDifference))

上面的代码应该返回 0 而不是 null。

下面是我正在使用的代码。我不知道我错过了什么。

connectionObj.Tb_PurchaseProductDetail.Where(s => s.ProductId == prodcutId && ((s.Quantity + s.DiscountQuantity + s.tb_productstockupdate.Sum(d => d.StockDifference)) > s.SoldPackQuantity)).Select(s => new SelectListItem()
            {
                Text = s.BatchNumber + " [(" + (s.Quantity + s.DiscountQuantity + s.tb_productstockupdate.Sum(d => d.StockDifference) - s.SoldPackQuantity) + ") & " + s.ExpiryDate + "]",
                Value = s.Id.ToString()
            }).ToList();

下面的代码解决了我的问题。我使用 Any() 检查辅助表是否有数据并相应地放置我的逻辑。

connectionObj.Tb_PurchaseProductDetail.Where(s => s.ProductId == prodcutId && ((s.Quantity + s.DiscountQuantity + (s.tb_productstockupdate.Any() ? s.tb_productstockupdate.Select(d => d.StockDifference).Sum() : 0)) > s.SoldPackQuantity)).Select(s => new SelectListItem()
            {
                Text = s.BatchNumber + " [(" + (s.Quantity + s.DiscountQuantity + (s.tb_productstockupdate.Any()? s.tb_productstockupdate.Sum(d => d.StockDifference) : 0) - s.SoldPackQuantity) + ") & " + s.ExpiryDate + "]",
                Value = s.Id.ToString()
            }).ToList();

标签: c#sqlentity-frameworklinqlambda

解决方案


下面的代码解决了我的问题。我使用 Any() 检查辅助表是否有数据,并相应地使用了三元运算符。

connectionObj.Tb_PurchaseProductDetail.Where(s => s.ProductId == prodcutId && ((s.Quantity + s.DiscountQuantity + (s.tb_productstockupdate.Any() ? s.tb_productstockupdate.Select(d => d.StockDifference).Sum() : 0)) > s.SoldPackQuantity)).Select(s => new SelectListItem()
            {
                Text = s.BatchNumber + " [(" + (s.Quantity + s.DiscountQuantity + (s.tb_productstockupdate.Any()? s.tb_productstockupdate.Sum(d => d.StockDifference) : 0) - s.SoldPackQuantity) + ") & " + s.ExpiryDate + "]",
                Value = s.Id.ToString()
            }).ToList();

推荐阅读