可空对象必须在计数表达式的上下文中具有值

问题描述 投票:0回答:1

我在我的 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 表达式放入 {} 内,但这不起作用。

如有任何建议,我们将不胜感激。非常感谢。

asp.net if-statement razor nullreferenceexception
1个回答
0
投票

如果

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")

© www.soinside.com 2019 - 2024. All rights reserved.