Получите напоминание о Дне рождения год игнорирования Запроса Linq

Вы можете выполнить это с Насмешкой в.NET. Однако нет никакой поддержки в языке этой функции, я думаю, что это будет доступно в C# 4.0. Существует много библиотек там для Насмешки, включая:

5
задан kart 22 October 2009 в 06:37
поделиться

3 ответа

Почему бы не сохранить день рождения в локальной переменной, изменить год на текущий год, а затем проверить, наступит ли он в следующие 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));

Доброта,

Дэн

4
ответ дан 14 December 2019 в 19:18
поделиться

Вот один способ сделать это. Мне не очень нравится, как сначала вычисляют день рождения «в этом году», а потом исправляют его, если он уже прошел, но я не мог придумать лучшего способа за короткое время.

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 { /* ... */ };
0
ответ дан 14 December 2019 в 19:18
поделиться

Используйте свойство DateTime.DayOfYear , чтобы получить целое число; 1 января == 1, последний день года = 365/366.

В наивных версиях используется что-то вроде

where user.Birthday.DayOfYear - DateTime.Now.DayOfYear > 20

Это не работает, когда год заканчивается, когда текущий день приходится на конец декабря, а день рождения пользователя - на начало января. Но начните с DateTime.DayOfYear

0
ответ дан 14 December 2019 в 19:18
поделиться
Другие вопросы по тегам:

Похожие вопросы: