我正在使用C#MVC,我需要獲取用戶詳細信息誰在未來20天生日。使用LINQ to sql查詢,它只想比較日期和月份,而不是年份,以便在未來20天內獲取生日的用戶,任何人都可以幫助我使用LINQ to sql查詢來獲取在未來20天內生日的用戶。獲取生日提醒Linq查詢忽略年份
在此先感謝,
我正在使用C#MVC,我需要獲取用戶詳細信息誰在未來20天生日。使用LINQ to sql查詢,它只想比較日期和月份,而不是年份,以便在未來20天內獲取生日的用戶,任何人都可以幫助我使用LINQ to sql查詢來獲取在未來20天內生日的用戶。獲取生日提醒Linq查詢忽略年份
在此先感謝,
爲什麼不生日存儲在一個局部變量,在今年更改爲當前一年,然後檢查是否在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));
善良,
丹
嗨,感謝您的回覆..問題是我無法將單獨的年份單獨轉換爲當年,因爲它是隻讀類型,我們無法單獨指定年份「birthday.Year = DateTime.Now.Year」。請在這方面幫助我。 – kart 2009-10-22 08:10:24
您不能像這樣爲'DateTime.Year'賦值,因爲它是隻讀屬性,'DateTime'是不可變類型。你*可以做的是用你想要的值創建一個新的'DateTime':'var birthday = new DateTime(DateTime.Now.Year,actualBirthday.Month,actualBirthday.Day;' – Lucas 2009-10-30 18:41:37
另外,當'DateTime現在'是在一年的最後20天嗎?你會發現明年1月的生日嗎? – Lucas 2009-10-30 18:46:31
下面是做到這一點的方法之一。我真的不喜歡它計算機「今年的生日」的方式,如果它已經過去,然後糾正它,但我不能在短時間內想到更好的方法。
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 { /* ... */ };
使用DateTime.DayOfYear
屬性獲取整數; 1月1日== 1,最後一天= 365/366。
天真的版本使用類似於
where user.Birthday.DayOfYear - DateTime.Now.DayOfYear > 20
當打之年包圓這不起作用 - 在當前日期是在12月下旬和用戶的生日在一月初。但從DateTime.DayOfYear
這是一個很好的解決方案。
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贏在共享
爲什麼不使用局部變量來存儲計算?它會更容易閱讀。 – 2012-10-27 18:15:42
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;
}
大表或小桌子?任何基於查詢的解決方案_will_恢復到表掃描,所以我會去一個索引計算列數據庫端,如果你經常檢查和/或如果你檢查大量的記錄... – KristoferA 2009-11-01 11:10:21