我在我的 asp.net 应用程序的报告页面上收到此错误。我已经查看了有关此错误的问题的其他答案,但仍然无法理解如何解决它。
我从我的 .cshtml 页面收到此行错误:
@(@Model.Results.Where(x => x.ArrestTime.Value.ToString("HH") == "00").Count() +
这是发生这种情况的完整表格行:
<tr>
<td width="16%" align="left">Count</td>
<td width="18%" align="right">
@(@Model.Results.Where(x => x.ArrestTime.Value.ToString("HH") == "00").Count() +
@Model.Results.Where(x => x.ArrestTime.Value.ToString("HH") == "01").Count() +
@Model.Results.Where(x => x.ArrestTime.Value.ToString("HH") == "02").Count() +
@Model.Results.Where(x => x.ArrestTime.Value.ToString("HH") == "03").Count() +
@Model.Results.Where(x => x.ArrestTime.Value.ToString("HH") == "04").Count() +
@Model.Results.Where(x => x.ArrestTime.Value.ToString("HH") == "05").Count())
</td>
</tr>
我的.cs如下:
public class IndexModel : PageModel
{
private readonly ApplicationDbContext _db;
public IndexModel(ApplicationDbContext db)
{
_db = db;
}
public IEnumerable<Incident> Results { get; set; }
public void OnGet()
{
Results = _db.Incident.ToList();
}
public void OnPost(DateTime startdate, DateTime enddate, string sortOrder)
{
Results = (from x in _db.Incident where (x.ArrestDate >= startdate) && (x.ArrestDate <= enddate) select x).ToList();
var startdate1 = startdate.ToShortDateString();
var enddate1 = enddate.ToShortDateString();
ViewData["startingparameter"] = $"Starting Arrest Date: {startdate1}";
ViewData["endingparameter"] = $"Ending Arrest Date: {enddate1}";
}
}
其所基于的模型事件将 ArrestTime 设置为可为空:
[Display(Name = "Arrest Time")]
[DataType(DataType.Time)]
public DateTime? ArrestTime { get; set; }
所以,我不太清楚为什么会发生这种情况。当我发布该应用程序时,它正在运行,但后来停止了,并且在尝试在生产中运行它时报告页面返回 500 错误。
我尝试添加 if(@Model.Results.Where(x => x.ArrestTime.HasValue){} 并将 Count 表达式放入 {} 内,但这不起作用。
如有任何建议,我们将不胜感激。非常感谢。
如果
ArrestTime
可以为空,那么这意味着它可能没有 有值。然而,这段代码假设它总是有一个值:
Model.Results.Where(x => x.ArrestTime.Value.ToString("HH") == "00")
如果它始终有一个值,那么不要将其设置为可为空,只需使用
DateTime
。但是,如果它“可能没有”值,那么您需要在尝试使用它之前检查该值是否存在。例如:
Model.Results.Where(x => x.ArrestTime.HasValue && x.ArrestTime.Value.ToString("HH") == "00")
或:
Model.Results.Where(x => x.ArrestTime != null && x.ArrestTime.Value.ToString("HH") == "00")