我正在查询2个不同的整数,并且至少有一个它们需要超过0.当我在执行select语句时我工作正常我根据.Sum()
方法计算股票如果int
为null
,则需要返回0,这会给我一个空的异常。
我知道DefaultIfEmpty(0)
,但所有其他问题的方式与我的方式有所不同,我在select语句中计算了2个不同的变量,而且我没有足够的经验可以返工这个查询。
public IEnumerable<Item> GetInStockTooling()
{
try
{
using (var context = new SpectrumContext())
{
var inStock = context.Item
.Include(i => i.ItemType)
.Include(i => i.ItemLots)
.Include(i => i.LocationStocks)
.Where(w => w.ItemLots.Any(a => a.Quantity > 0 && a.JobItemID == null) || w.LocationStocks.Any(a => a.AmountOfStock > 0) && w.ItemTypeID == (int)ItemTypes.Tooling && w.IsActive)
.Select(b => new
{
b,
ItemLots = b.ItemLots.Where(w => w.JobItemID == null && w.Quantity > 0),
ItemType = b.ItemType,
LocationStocks = b.LocationStocks.Where(w => w.AmountOfStock > 0)
})
.AsEnumerable()
.Select(x => x.b)
.ToList()
.Select(x => { x.Stock = x.ItemLots.Sum(s => s.Quantity) + x.LocationStocks.Sum(s => s.AmountOfStock); return x; });
return inStock;
}
}
catch (Exception)
{
throw;
}
}
我已尝试对数量/ AmountOfStock执行?? 0
和?? 0m
但我收到Operand cannot be applied to type 'decimal' and 'decimal'
错误。
我也尝试使用DefaultIfEmpty
,但我不知道在哪里使用它,因为他们正在Select
内进行所有计算,我不知道如何将其从使用Select
的{{1}}。
答案 0 :(得分:0)
这样的事情怎么样?
x.ItemLots.Sum(s => s.Quantity ?? 0) + x.LocationStocks.Sum(s => s.AmountOfStock ?? 0);
编辑...
对不起,我没有一直读到问题的最后。可能有助于调试的一件事是注释掉大linq语句的最后一行(在ToList()之后结束它),并在那里设置断点以查看结果是什么。这可能有助于澄清正在查看的内容,以便您知道如何解决它。
答案 1 :(得分:0)
尝试检查null
然后返回0,否则返回该号码。在这里使用三元运算符:
x.ItemLots.Sum(s => { return s.Quantity == null ? 0 : s.Quantity; }) + x.LocationStocks.Sum(s => { s.AmountOfStock == null ? 0 : s.AmountOfStock; });