Accept方法返回null - C#.NET MVC

Seb*_*ank 2 c# asp.net-mvc decimal linq-to-sql

我正在.NET 4 MVC 2中为办公室桌上足球桌构建一个小应用程序.我有一个使用LINQ to SQL汇总一列(十进制)的所有值的方法.它看起来像这样:

public decimal GetPlayerRating(int id)
{
    var playerRating = (from r in db.Ratings
                        where r.PlayerID == id
                        select r.Points).Sum();

    return playerRating;
}
Run Code Online (Sandbox Code Playgroud)

问题在于,有时当它被调用时它会返回,null因为给定的玩家在表中没有任何记录.那很好 - 在这种情况下它应该只返回零.但我得到这个错误:

无法将null值分配给类型为System.Decimal的成员,该成员是非可空值类型.

描述:执行当前Web请求期间发生未处理的异常.请查看堆栈跟踪以获取有关错误及其源自代码的位置的更多信息.

异常详细信息:System.InvalidOperationException:无法将null值分配给类型为System.Decimal的成员,该成员是非可空值类型.

如何告诉我的方法可以返回空值?谢谢!

asa*_*yer 7

尝试null coalese运算符

return playerRating ?? 0d;
Run Code Online (Sandbox Code Playgroud)

那将永远不会返回null.

如果你真的需要返回一个可以为null的值类型,尽管尝试这个

public decimal? GetPlayerRating(int id)
{ ... }
Run Code Online (Sandbox Code Playgroud)

添加一个?到像double这样的值类型的末尾被重写为Nullable <type>(Nullable <double> here)

处理可空值类型时,请务必检查它是否具有值(非null)

if ( myNullableType.HasValue ) 
{
    x = myNullableType.Value;
}
Run Code Online (Sandbox Code Playgroud)