获得null错误LINQ; 不能再使用?

Nic*_*ckP 5 c# linq asp.net-mvc-3

我试图在LINQ中运行以下内容

double totalDistance = (from g in db.Logs join 
    h in db.Races on g.raceId equals h.RaceId 
    where g.userId == id select h.distance).Sum();
Run Code Online (Sandbox Code Playgroud)

但是得到一个错误:

转换为值类型"Double"失败,因为实现值为null.结果类型的泛型参数或查询必须使用可空类型.

我试着加上?? 0; 这样:

double totalDistance = (from g in db.Logs join 
    h in db.Races on g.raceId equals h.RaceId 
    where g.userId == id select h.distance).Sum() ?? 0;
Run Code Online (Sandbox Code Playgroud)

正如其他帖子中所建议的那样,这会产生错误:

算'''' 不能应用于操作数double或int

有什么建议?

编辑:我的模特

namespace RacePace.Models
{
public class Race
{
    public int RaceId { get; set; }

    [DisplayName("Race Setting")]
    public string place { get; set; }
    [DisplayName("Distance (km)")]
    public double distance { get; set; }
    [DisplayName("Date")]
    public DateTime date { get; set; }
    [DisplayName("Commencement Time")]
    public DateTime timeStarted { get; set; }
    [DisplayName("Active")]
    public Boolean active { get; set; }
    [DisplayName("Description")]
    public string description { get; set; }
    [DisplayName("Creator")]
    public int UserId { get; set; }
}
}
Run Code Online (Sandbox Code Playgroud)

Ale*_*lex 2

你应该让你的模型中的距离可以为空双倍,以使 ?? 工作。来自http://msdn.microsoft.com/en-us/library/ms173224.aspx

这 ??运算符称为空合并运算符,用于定义可为空值类型或引用类型的默认值

所以将你的模型更改为

public double? distance { get; set; }
Run Code Online (Sandbox Code Playgroud)

应该使?工作