使用C#MVC,我需要获取在未来20天内过生日的用户详细信息。使用linq to sql查询只想比较日期和月份而不是年份,为了获取在接下来的20天内生日的用户,任何人都可以帮助我使用linq to sql查询来获取在接下来的20天内生日的用户
提前感谢,
答案 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;
}