如果任一项为null,则选择Linq语句需要返回0

时间:2016-10-27 17:40:39

标签: c# asp.net linq

我正在查询2个不同的整数,并且至少有一个它们需要超过0.当我在执行select语句时我工作正常我根据.Sum()方法计算股票如果intnull,则需要返回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}}。

2 个答案:

答案 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; });