Я не знаком с Linq, я постараюсь помочь с некоторым псевдокодом.
Самое важное условие должно выглядеть следующим образом:
Date(CurrentDate.Year, DateOfBirth.Month, DateOfBirth.Day) >= CurrentDate
|| ' OR
Date(CurrentDate.Year + 1, DateOfBirth.Month, DateOfBirth.Day) >= CurrentDate
Это будет работать 31 декабря тоже.
Альтернатива:
// consider this as pseudocode, I didnt tested that in C#
function GetNextBirthday(DateTime DateOfBirth)
{
int yearOfNextBirthday;
int birthdayMMDD = DateOfBirth.Month*100 + DateOfBirth.Day;
int todayMMDD = CurrentDate.Month*100 + CurrentDate.Day;
if (birthdayMMDD >= todayMMDD)
{
yearOfNextBirthday = CurrentDate.Year; // this year
}
else
{
yearOfNextBirthday = CurrentDate.Year + 1; // next year
}
DateTime nextBirthday;
// you have to write this line yourself, i dont remember how to make date from Y, M, D
nextBirthday = DateFromYMD(yearOfNextBirthday, DateOfBirth.Month, DateOfBirth.Day);
return nextBirthday;
}
Учитывая, что * каждый * живой имеет наступающий день рождения в какой-то момент, как далеко вы хотите, чтобы он ушел? Месяц? Конец года? –
'Take (15)' - только в ближайшие 15 дней рождения.Конец года может быть проблемой, когда я запускаю запрос 31 декабря. – SeToY
@Kamil. Это также потерпит неудачу 31 декабря, когда у кого-то будет свой день рождения 1 января. – SeToY