Estou recebendo esse erro em uma página de relatório no meu aplicativo asp.net. Analisei as outras respostas às perguntas feitas sobre esse erro, mas ainda não consigo entender como resolvê-lo.
Estou recebendo o erro nesta linha da minha página .cshtml:
@(@Model.Results.Where(x => x.ArrestTime.Value.ToString("HH") == "00").Count() +
Aqui está a linha completa da tabela onde isso está ocorrendo:
<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>
Meu .cs é o seguinte:
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}";
}
}
O modelo Incident no qual isso se baseia tem o ArrestTime definido como anulável:
[Display(Name = "Arrest Time")]
[DataType(DataType.Time)]
public DateTime? ArrestTime { get; set; }
Então, não sei bem por que isso está acontecendo. Quando publiquei o aplicativo, ele estava funcionando, mas parou e a página do relatório retorna um erro 500 ao tentar executá-lo em produção.
Tentei adicionar um if(@Model.Results.Where(x => x.ArrestTime.HasValue){} e colocar a expressão Count dentro de {}, mas não funcionou.
Qualquer conselho seria muito apreciado. Muito obrigado.
Se
ArrestTime
for anulável, isso implica que pode não ter um valor. No entanto, este código assume que sempre terá um valor:Se sempre tiver um valor, não o torne anulável, apenas use a
DateTime
. No entanto, se não tiver um valor, será necessário verificar se esse valor existe antes de tentar usá-lo. Por exemplo:ou: