c# - LINQ Sum() 中的 IsNull
问题描述
我在 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();
或者
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();
返回错误:
运算符“==”不能应用于“十进制”和“DBNull”类型的操作数
解决方案
您可以Any()
在此处使用它来检查是否有任何行 for ,如果是,则对forLoadingDetails
求和:Quantity
LoadingDetails
RemainingQuantity = p.LoadingDetails.Any() ?
p.Quantity - p.LoadingsDetails.Sum(n => n.Quantity) :
p.Quantity
推荐阅读
- dialogflow-es - 是否可以让我的对话流代理在互联网上搜索未解决问题的答案?
- tensorflow - 带有 TensorFlow 的 Keras 不使用 GPU,而是使用 CPU
- angular - 循环浏览资产文件夹中的图像
- android - 使用哪个 Gradle 属性来获取 Gradle 将生成的 APK 存储在哪里?
- mysql - 部署到 Azure 中以破折号命名的 MySql 数据库
- mysql - Laravel 发送邮件 call_user_func() 错误
- reactjs - 与打字稿 jquery 导入反应不起作用
- selenium - 无法在詹金斯中运行硒测试用例
- php - 无法在functions.php中放置的自定义函数中正确写入自定义字段数据
- postgresql - 沉默“未知的 OID 17227:无法识别‘地理’的类型。它将被视为字符串。”