比较日期,忽略年份-Linq/实体框架

比较日期,忽略年份-Linq/实体框架,linq,entity-framework,Linq,Entity Framework,使用Linq和实体框架,有没有简单的方法来比较忽略年份的日期 假设我有以下几点 var result = context.SomeEntity.Where(e => e.SomeDate > startDate); 这是假设SomeDate和startDate是.NET日期时间的 我想做的是比较这些日期,而不是比较年份。某天可以是任何一年。有什么简单的方法可以做到这一点吗?我能想到的唯一方法是使用以下方法: var result = context.SomeEntity(e =&g

使用Linq和实体框架,有没有简单的方法来比较忽略年份的日期

假设我有以下几点

var result = context.SomeEntity.Where(e => e.SomeDate > startDate);
这是假设SomeDate和startDate是.NET日期时间的

我想做的是比较这些日期,而不是比较年份。某天可以是任何一年。有什么简单的方法可以做到这一点吗?我能想到的唯一方法是使用以下方法:

var result = context.SomeEntity(e => 
    e.SomeDate.Month > startDate.Month ||
    (e.SomeDate.Month == startDate.Month && e.SomeDate.Day >= startDate));
如果我也希望有一个结束日期,那么这个方法很快就会变得更复杂,因为我必须考虑开始日期在年底,结束日期在年初的情况

有什么简单的方法可以做到这一点吗

更新:


我最终只是按照我在帖子中最初的想法去做。。。对于概念上简单的东西,有很多代码。基本上只需找出日期是否在某个范围内,忽略年份,如果startDate>endDate,则循环日历如果有人知道更简单的方法,请在我仍然感兴趣的情况下发布。

如果您确实需要只比较日期(而不是时间),则
DateTime。DayOfYear属性可能会有所帮助。但在这种情况下,你应该小心闰年。除此之外,我无法想象有什么比你的方法更简单的了,你可以比较几个月和几天

如果您所关心的是,在引入第二次比较后,该方法将变得更加复杂,那么简单的方法提取应该会有所帮助

另一种方法可能是创建一个扩展方法,该方法将返回一个适用于比较的数字。例如,让我们调用此方法
GetYearIgnoringOrdinal()

然后像这样使用它:

var result = context.SomeEntity.Where(e => e.SomeDate.GetYearIgnoringOrdinal() > startDate.GetYearIgnoringOrdinal());

看起来稍微简单一点

var result = context.SomeEntity(e => 
    e.SomeDate.Month * 100 + e.SomeDate.Day > startDate.Month * 100 + startDate.Day
);

您还可以创建一个用户定义的函数(假设使用了SQL server),该函数可以在查询中使用。

'DayOfYear'在LINQ to Entities中不受支持。@bunglestink您解决过这个问题吗?如果ef给我Hell,我想强制SQL查询将其转换为列表,然后使用“DayOfYear”方法进行另一次选择。
var result = context.SomeEntity(e => 
    e.SomeDate.Month * 100 + e.SomeDate.Day > startDate.Month * 100 + startDate.Day
);