使用 Entity Framework Core 查找最大日期 - 在 Razor Pages 中
Finding Max Date using Entity Framework Core - in Razor Pages
我正在构建一个 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 table 并获取
existing 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...如果我需要标记其他内容(第一次使用该资源的用户)请告诉我。
谢谢
这是因为 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
我正在构建一个 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 table 并获取
existingMaxDateForExam
先前注册的值(如果
一个存在)。这是我目前所拥有的。
我只是找不到正确的代码来提取 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...如果我需要标记其他内容(第一次使用该资源的用户)请告诉我。
谢谢
这是因为 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