ASP.NET 6 Razor Pages中DateOnly/TimeOnly对象的查询问题
ASP.NET 6.0 Razor Pages中DateOnly/TimeOnly属性的查询实现
问题场景
我是ASP.NET新手,正在用ASP.NET 6.0 Razor Pages开发项目。模型TestModel包含Name、可空的DateOnly? Date和TimeOnly? Time属性。表单支持多条件搜索,需要根据用户输入的日期(格式如2023-09-03)或时间(格式如01:39:20)执行查询(与数据库存储格式一致)。已经实现了Name的查询逻辑,但尝试过将日期作为字符串匹配、使用Date.Equals、直接访问Date.Value等方法均无效,最终找到了可行的解决方案。
解决方案代码
日期查询
将用户输入的日期字符串转换为DateOnly类型后,结合空值判断进行匹配:
// DateStr为用户输入的日期字符串(格式示例:"2023-09-03") DateOnly dateOnly = DateOnly.Parse(DateStr); TestQuery = TestQuery.Where(s => s.Date != null && s.Date.Value.Equals(dateOnly));
时间查询
将用户输入的时间字符串转换为TimeOnly类型后,结合空值判断进行匹配:
// TimeStr为用户输入的时间字符串(格式示例:"01:39:20") TimeOnly timeOnly = TimeOnly.Parse(TimeStr); TestQuery = TestQuery.Where(s => s.Time != null && s.Time.Value.Equals(timeOnly));
关键说明
- 类型匹配:必须将用户输入的字符串转换为对应
DateOnly/TimeOnly类型,直接用字符串和数据库中的强类型字段匹配会导致EF Core无法生成正确的SQL查询,从而匹配失败。 - 空值安全:因为
Date和Time是可空属性,查询时必须先判断s.Date != null/s.Time != null,再访问Value属性,避免空引用异常。
内容的提问来源于stack exchange,提问作者Archana
相关产品推荐
相关产品推荐

