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)
你应该让你的模型中的距离可以为空双倍,以使 ?? 工作。来自http://msdn.microsoft.com/en-us/library/ms173224.aspx:
这 ??运算符称为空合并运算符,用于定义可为空值类型或引用类型的默认值
所以将你的模型更改为
public double? distance { get; set; }
Run Code Online (Sandbox Code Playgroud)
应该使?工作