获取生日提醒Linq Query无视年份

时间:2009-10-22 06:37:56

标签: c# linq-to-sql model-view-controller

使用C#MVC,我需要获取在未来20天内过生日的用户详细信息。使用linq to sql查询只想比较日期和月份而不是年份,为了获取在接下来的20天内生日的用户,任何人都可以帮助我使用linq to sql查询来获取在接下来的20天内生日的用户

提前感谢,

5 个答案:

答案 0 :(得分:4)

为什么不将Birthday存储在本地变量中,将年份更改为当前年份,然后检查它是否会在接下来的20天内发生?

public bool IsBirthdayInNextTwentyDays(DateTime actualBirthday)
{
var birthday = actualBirthday;
birthday.Year = DateTime.Now.Year;

return birthday > DateTime.Now && birthday < DateTime.Now.AddDays(20);
}

然后在Linq中就像:

user.Where(u => IsBirthDayInNextTwentyDays(u.Birthday));

善,

答案 1 :(得分:1)

这是一个很好的解决方案。

 public bool IsBirthdayInNextTwentyDays(DateTime today,DateTime actualBirthday,int days)
 {
        if ((actualBirthday.DayOfYear - today.DayOfYear >= 0) )
        {
            return (actualBirthday.DayOfYear - today.DayOfYear <= days);
        }
        else
        {
            return (actualBirthday.DayOfYear +365 - today.DayOfYear <= days);
        }
  }

SPS赢得分享

答案 2 :(得分:0)

这是一种方法。我真的不喜欢计算机“今年”生日的方式,然后如果它已经过去就更正它,但我想不出更好的方法在短时间内。

from p in Persons
let thisYearsBirthday = p.Birthdate.AddYears(today.Year - p.Birthdate.Year)
// OR this way, although the SQL it produces it a little less simple
// let thisYearsBirthday = new DateTime(today.Year, p.Birthdate.Month, p.Birthdate.Day)
let nextBirthday = (thisYearsBirthday >= today) ? thisYearsBirthday : thisYearsBirthday.AddYears(1)
where nextBirthday >= today && nextBirthday <= today.AddDays(20)
select new { /* ... */ };

答案 3 :(得分:0)

使用DateTime.DayOfYear属性获取整数; 1月1日== 1,一年的最后一天= 365/366。

天真的版本使用类似

的东西
where user.Birthday.DayOfYear - DateTime.Now.DayOfYear > 20

当年份结束时,这不起作用 - 当天是在12月下旬,而用户的生日是在1月初。但从DateTime.DayOfYear

开始

答案 4 :(得分:0)

public static bool IsBirthdayInNextXDays(DateTime realDate, DateTime birthdayDate, int numberOfDaysToCheck)
{
    bool isOk = false;

    if ((birthdayDate.DayOfYear - realDate.DayOfYear) <= numberOfDaysToCheck && (birthdayDate.DayOfYear - realDate.DayOfYear) >= 0)
        isOk = true;

    return isOk;
}