提问人:MelB 提问时间:9/6/2023 更新时间:9/6/2023 访问量:18
可为 null 的对象必须在计数表达式的上下文中具有值
Nullable object must have a value in Context of Count Expression
问:
我在 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}";
}
}
这所基于的模型 Incident 将 ArrestTime 设置为可为 null:
[Display(Name = "Arrest Time")]
[DataType(DataType.Time)]
public DateTime? ArrestTime { get; set; }
所以,我不太确定为什么会这样。当我发布该应用程序时,它正在工作,但此后已停止,并且报告页面在尝试在生产环境中运行它时返回 500 错误。
我尝试添加 if(@Model.Results.Where(x => x.ArrestTime.HasValue){} 并将 Count 表达式放在 {} 中,但这不起作用。
任何建议将不胜感激。非常感谢。
答:
1赞
David
9/6/2023
#1
如果可为 null,则意味着它可能没有值。但是,此代码假定它始终具有一个值:ArrestTime
Model.Results.Where(x => x.ArrestTime.Value.ToString("HH") == "00")
如果它总是有一个值,那么不要让它可以为 null,只需使用 .但是,如果它可能没有值,则需要在尝试使用它之前检查该值是否存在。例如: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")
评论
0赞
MelB
9/6/2023
非常感谢!!我为自己没有想到只添加.HasValue 条件作为使用 && 的每个表达式的一部分。就是这么简单。再次感谢。
评论