我想知道是否有更好/更简单的方式来加载用户的生日.
我有一个User实例,它有属性,包括这个:
public DateTime? BirthDate { get; set; }
我想要做的是加载从一个日期到另一个日期有bdays的用户:
public IEnumerable<User> LoadUsersByBirthday(DateTime from, DateTime into)
Run Code Online (Sandbox Code Playgroud)
我不关心生日年份,例如,如果我有3个生日用户:
LoadUsersByBirthday(new DateTime(2990, 3, 1), new DateTime(3013, 4, 15)) 应该返回2个用户 - 第1和第3.
我的方法看起来像这样:
public IEnumerable<User> LoadUsersByBirthday(DateTime from, DateTime into)
{
var days = DateTime.DaysInMonth(from.Year, from.Month);
var u1 = _unit.User.Load(u => ((DateTime) (u.BirthDate)).Month == from.Month
&& ((DateTime) (u.BirthDate)).Day >= from.Day
&& ((DateTime) (u.BirthDate)).Day <= days);
var u2 = _unit.User.Load(u => ((DateTime) (u.BirthDate)).Month > from.Month
&& ((DateTime) (u.BirthDate)).Month < into.Month);
var u3 = _unit.User.Load(u => ((DateTime) (u.BirthDate)).Month == into.Month
&& ((DateTime) (u.BirthDate)).Day <= into.Day);
return u1.Concat(u2).Concat(u3);
}
Run Code Online (Sandbox Code Playgroud)
它有效,但有更好/更简单的方法吗?
我认为这应该有效:
public IEnumerable<User> UsersByBirthday(IEnumerable<User> users, DateTime from, DateTime to)
{
var fromNormalized = NormalizeDate(from);
var intoNormalized = NormalizeDate(into);
return users.Where(u => fromNormalized <= NormalizeDate(u.BirthDate) && NormalizeDate(u.BirthDate) <= intoNormalized);
}
public int NormalizeDate(DateTime date)
{
return date.Month * 100 + date.Day;
}
Run Code Online (Sandbox Code Playgroud)
该NormalizeDate()方法返回一个整数值,表示易于比较的月份和日期。对于 9 月 3 日,它返回 903,对于 4 月 24 日,它返回 424。
if 没有错误处理from > to。
| 归档时间: |
|
| 查看次数: |
273 次 |
| 最近记录: |