gpt4 book ai didi

linq - 比较日期,忽略年份 - Linq/Entity Framework

转载 作者:行者123 更新时间:2023-12-02 04:11:20 26 4
gpt4 key购买 nike

有没有使用 Linq 和 Entity Framework 来比较日期且忽略年份的简单方法?

假设我有以下内容

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

这是假设 SomeDate 和 startDate 是 .NET DateTime 的。

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

var result = context.SomeEntity(e => 
e.SomeDate.Month > startDate.Month ||
(e.SomeDate.Month == startDate.Month && e.SomeDate.Day >= startDate));

如果我也希望有一个 endDate,此方法很快就会变得更加复杂,因为我将不得不做一些事情,比如考虑开始日期是年底和结束日期是年初.

有什么简单的方法可以解决这个问题吗?

更新:

我最终只是按照我最初在帖子中想到的方式去做……为了概念上简单的东西写了一大堆代码。基本上只需要查找日期是否在一个范围内,忽略年份,如果 startDate > endDate 则循环日历如果有人知道更简单的方法,请发布,因为我仍然感兴趣。

最佳答案

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

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

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

public static int GetYearIgnoringOrdinal(this DateTime date)
{
return date.Month*100 + date.Day;
}

然后像这样使用它:

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

关于linq - 比较日期,忽略年份 - Linq/Entity Framework,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5029599/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com