c# - 按生日加载用户

标签 c# .net

我想知道是否有更好/更简单的方法来按生日加载用户。

我有一个 User 实例,它有属性,包括这个:

公共(public)日期时间?出生日期 { 得到;放; }

我想要做的是加载从一个日期到另一个日期有生日的用户:

public IEnumerable<User> LoadUsersByBirthday(DateTime from, DateTime into)

我不关心生日年份,例如,如果我有 3 个用户生日:

  1. 日期时间(1991, 3, 20);
  2. 日期时间(1990, 4, 25);
  3. 日期时间(1989, 3, 10);

LoadUsersByBirthday(new DateTime(2990, 3, 1), new DateTime(3013, 4, 15)) 应该返回 2 个用户 - 第一个和第三个。

我的方法是这样的:

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);
    }

它有效,但是有没有更好/更简单的方法来做到这一点?

最佳答案

我认为这应该可行:

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;
}

NormalizeDate() 方法返回一个整数值,表示易于比较的月份和日期。对于 9 月 3 日,它返回 903,对于 4 月 24 日,它返回 424。

如果 from > to 没有错误处理。

关于c# - 按生日加载用户,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17988026/

相关文章:

c# - 上下文操作的 ReSharper SDK 测试不起作用

.net - 解析 T-SQL 以参数化查询

c# - SpecialFolder.Desktop 和 SpecialFolder.DesktopDirectory 之间有什么区别?

c# - WPF - 带有按钮项的组合框

c# - 将 DropDownList 中的数据包含到 Gridview 中

.net - 总是使用 Form.Invoke() 是一种不好的做法吗?

c# - 不使用数据库数据可以使用DataGridView吗?

c# - 使用 TCHAR** x[] 参数从 C# 编码到 DLL

c# - WPF 中排队事件的最佳实践

c# - 为什么我必须指定所有泛型类型参数?