【问题标题】:Finding Max Date using Entity Framework Core - in Razor Pages使用 Entity Framework Core 查找最大日期 - 在 Razor 页面中
【发布时间】:2020-07-08 06:51:52
【问题描述】:

我正在构建一个 Razor Pages Web 应用程序,用于将用户注册到考试中。 ExamRegistration 模型有一个名为 MaxDateForExam 的字段可以为空,因为这是以后添加到现有数据库的新功能。创建考试时,我想在 OnPost 之后用一个值填充此字段。

如果用户是第一次申请考试,只需获取ExamDate 并添加 1 年。在随后的注册(用户未通过考试)中,我不想创建新的MaxDate,而是从第一次注册记录中获取MaxDate

我的 ExamRegistrations 模型具有以下属性

[DataType(DataType.Date)]
[DisplayFormat(DataFormatString = "{0:yyyy-MM-dd}", ApplyFormatInEditMode = true)]
public DateTime? MaxDateForExam { get; set; }

在我将某人注册到新考试的页面上,我需要进行检查:

  • 如果这个人是第一次注册,我会抓住ExamDate 并为其添加一年,然后填充MaxDateForExam 场地。

  • 如果用户注册的考试不是我第一次需要的考试 让应用程序进入 ExamRegistration 表并获取
    现有MaxDateForExam 先前注册的值(如果
    一个存在)。这是我目前所拥有的。

我只是找不到正确的代码来提取MaxDateForExam 的值。这是我的代码的一部分......

public DateTime MaxWriteDate { get; set; }                 
public Models.ExamRegistration ApplicantRecord { get; set; }

if(ExamRegistration.ExamAttempt == "1st Attempt")
     {                    
        MaxWriteDate = ExamRegistration.Exam.ExamDate.AddYears(1);
     }
     else
     {
         ApplicantRecord = _context.ExamRegistrations                        
         .Where(m => m.ApplicantID == ExamRegistration.ApplicantID && m.ExamAttempt == "1st Attempt") 
         .FirstOrDefault();

         if(ApplicantRecord == null)
          {
              MaxWriteDate = ExamRegistration.Exam.ExamDate.AddYears(1);
          }
          else
          {
               MaxWriteDate = ApplicantRecord.MaxDateForExam;   ???????FAILS????????
          }
      }

我能得到的任何方向都会有所帮助。该错误似乎总是围绕无法转换 System.DateTime?到 System.DateTime。你错过了演员表吗?

我已将答案标记为正确,并且我学到了更多的 C# 和可为空类型。谢谢。

我能够通过使用代码克服错误:

MaxWriteDate = OldMaxWriteDate.MaxDateForExam ?? DateTime.MinValue;

感谢您的帮助。

PS....如果我需要标记其他内容(第一次使用伟大资源的用户),请告诉我。

谢谢

【问题讨论】:

标签: entity-framework-core razor-pages


【解决方案1】:

这是因为 MaxDateForExam 的值可能为 null,因此您不能将其分配给不可为 null 的变量。试试这个:

      if(ApplicantRecord == null)
      {
          MaxWriteDate = ExamRegistration.Exam.ExamDate.AddYears(1);
      }
      else
      {
          if (MaxDateForExam.HasValue)
          {
              MaxWriteDate = ApplicantRecord.MaxDateForExam.Value;
          }
          else
          {
              // Handle case where MaxDateForExam does not have a value
          }
      }

有关更多信息,请参阅可空值类型文档:

https://docs.microsoft.com/en-us/dotnet/csharp/language-reference/builtin-types/nullable-value-types

【讨论】:

    猜你喜欢
    • 2020-02-08
    • 2019-05-23
    • 2021-03-08
    • 1970-01-01
    • 2020-10-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多