如何在EF Core LINQ与Npgsql中比较日期?查询90天内到期文档遇阻
问题分析与解决方案
1. 先修正语法错误
你当前代码里的select { doc }是错误写法,应该直接写select doc,大括号在这里完全多余。
2. 核心日期比较逻辑调整
你要筛选90天内到期的文档,当前条件只判断了ExpirationDate <= 今天+90天,这会把已经过期(ExpirationDate < 今天)的文档也包含进来。正确的逻辑应该是筛选今天及以后、且90天内到期的文档,得加上ExpirationDate >= DateOnly.Today的判断。
3. DateOnly的优化写法
不用绕弯通过DateTime.Today转换,DateOnly本身自带Today属性,直接用DateOnly.Today.AddDays(90)更简洁直观。
修正后的查询表达式写法
var query = from doc in context.Documents where doc.ExpirationDate >= DateOnly.Today && doc.ExpirationDate <= DateOnly.Today.AddDays(90) select doc;
对应的方法链写法(适配复杂查询场景)
var query = context.Documents .Where(doc => doc.ExpirationDate >= DateOnly.Today && doc.ExpirationDate <= DateOnly.Today.AddDays(90));
兼容低版本EF的处理(如果用EF Core 5及以下)
如果你的EF版本不支持DateOnly类型,需要转成DateTime来处理:
var ninetyDaysFromNow = DateTime.Today.AddDays(90); var query = from doc in context.Documents where doc.ExpirationDate >= DateTime.Today && doc.ExpirationDate <= ninetyDaysFromNow select doc;
内容的提问来源于stack exchange,提问作者acmoune
相关产品推荐
相关产品推荐

