LINQ Sum()中的IsNull

时间:2018-12-30 04:29:41

标签: c# sql-server entity-framework linq

我在LINQ中遇到IsNull问题:

db.WarehouseInputsDetails
    .Select(p => new WarehouseInputDetailsViewModel
    {
        Id = p.Id
        RemainingQuantity = p.Quantity - p.LoadingsDetails.Sum(n => n.Quantity)
    }).AsQueryable();

p.LoadingsDetails.Sum(n => n.Quantity)的可能性NULL。我想要这样的结果:

select Id, IsNull(Sum(Quantity),0) as Quantity from LoadingsDetails

我尝试过类似的事情:

db.WarehouseInputsDetails
    .Select(p => new WarehouseInputDetailsViewModel
    {
        Id = p.Id
        RemainingQuantity = p.LoadingDetails.First() == null ? p.Quantity : p.Quantity - p.LoadingsDetails.Sum(n => n.Quantity)
    }).AsQueryable();

返回错误:

  

System.NotSupportedException:方法“ First”只能用作   最终查询操作。考虑使用方法“ FirstOrDefault”   代替这个实例。

我尝试过这样的事情:

db.WarehouseInputsDetails
    .Select(p => new WarehouseInputDetailsViewModel
    {
        Id = p.Id
        RemainingQuantity = (p.LoadingsDetails.Sum(n => n.Quantity) == DBNull.Value) ? p.Quantity : p.Quantity - p.LoadingsDetails.Sum(n => n.Quantity)
    }).AsQueryable();

OR

db.WarehouseInputsDetails
    .Select(p => new WarehouseInputDetailsViewModel
    {
        Id = p.Id
        RemainingQuantity = p.LoadingsDetails.First().Quantity == DBNull.Value ? p.Quantity : p.Quantity - p.LoadingsDetails.Sum(n => n.Quantity)
    }).AsQueryable();

返回错误:

  

运算符'=='不能应用于类型'decimal'和'DBNull'的操作数

enter image description here

1 个答案:

答案 0 :(得分:2)

您可以在此处使用<ul id='list'> <li>ITEM</li> <li>ITEM</li> <li>ITEM</li> <li>ITEM</li> <li>ITEM</li> <li>ITEM</li> <li>ITEM</li> <li>ITEM</li> <li>ITEM</li> <li>ITEM</li> <li>ITEM</li> <li>ITEM</li> <li>ITEM</li> <li>ITEM</li> <li>ITEM</li> <li>ITEM</li> </ul>来检查Any()是否存在任何行,如果是,则将LoadingDetailsQuantity的总和为:

LoadingDetails