如何在实体框架和函数中处理空值

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何在实体框架和函数中处理空值相关的知识,希望对你有一定的参考价值。

Screenshot

我的代码在这里:

Int64? amount = db.Items.Where(x => x.ItemOrdered == true).Sum(x => x.Price);

这工作正常,但通过错误数据库是空的

转换为值类型'System.Int32'失败,因为具体化值为null。结果类型的泛型参数或查询必须使用可空类型。

我想用0(零)替换它 我正在使用MVC应用程序的实体框架

答案

试试这个

var amount = db.Items.Where(x => x.ItemOrdered == true).Sum(x => x.Price ?? 0);

编辑:如果Price不可为空,如评论中所述。 所以,用这个

var amount = db.Items.Where(x => x.ItemOrdered == true).Sum(x => x.Price);
// for null check for amount use `?? 0`
另一答案

另一种选择是过滤掉空值:

var amount = db.Items.Where(x => x.ItemOrdered == true && x.Price != null).Sum(x => x.Price);
另一答案

问题不在于'Price'数据类型是否可以为空。实际上问题是它不可空,并且有一个空集。 EF Sum()函数只能处理空集,如果它处理可空数据。我知道这没有任何意义,因为空集和可空类型根本不是一回事。只需将其转换为可空类型,您将获得可空的响应。在空集的情况下,响应将为null。这就是唯一可行的案例。

Int64? amount = db.Items.Where(x => x.ItemOrdered == true).Sum(x => (Int64?) x.Price);

以上是关于如何在实体框架和函数中处理空值的主要内容,如果未能解决你的问题,请参考以下文章

如何通过实体框架将空值传递给存储过程?

在实体框架中找出导致异常的确切实体

使用实体框架迁移时 SQL Server 连接抛出异常 - 添加代码片段

使用 LINQ 和实体框架检查 c# var 中的空值

如何在实体框架中映射 CONTAINSTABLE 函数(代码优先)?

如何在实体框架代码优先方法中使用表值函数?