c# - 查询即将到来的生日

标签 c# linq entity-framework-5

我想向我的客户查询那些生日还未到的客户。

我试过这个查询,当然,它失败得惊人:

Addresses.Where(adr => adr.DateOfBirth != null && adr.DateOfBirth.Value >
DateTime.Now).Take(15).ToList();

当然这不能正常工作(如果你出生在未来就不行)我想知道如何查询我的 Nullable<DateTime>没有一年?

最佳答案

你可以像这样在一行中完成:

context.Addresses.Where(adr => adr.DateOfBirth != null).OrderBy(adr => EntityFunctions.DiffDays(DateTime.Today, EntityFunctions.AddYears(adr.DateOfBirth, EntityFunctions.DiffYears(adr.DateOfBirth, DateTime.Today) + ((adr.DateOfBirth.Month < DateTime.Today.Month || (adr.DateOfBirth.Day <= DateTime.Today.Day && adr.DateOfBirth.Month == DateTime.Today.Month)) ? 1 : 0)))).Take(15).ToList();

或者更易读的格式:

var query = from adr in context.Addresses
            where adr.DateOfBirth != null
            let diffYears = EntityFunctions.DiffYears(adr.DateOfBirth, DateTime.Today)
            let birthdayOccurred = adr.DateOfBirth.Month < DateTime.Today.Month || (adr.DateOfBirth.Day <= DateTime.Today.Day && adr.DateOfBirth.Month == DateTime.Today.Month)
            let nextBirthdate = EntityFunctions.AddYears(adr.DateOfBirth, diffYears + (birthdayOccurred ? 1 : 0))
            let daysToBirthdate = EntityFunctions.DiffDays(DateTime.Today, nextBirthdate)
            orderby daysToBirthdate
            select adr;

var result = query.Take(15).ToList();

关于c# - 查询即将到来的生日,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15118968/

相关文章:

c# - 是否可以查询接口(interface)属性?

c# - EF5 不创建枚举列

c# - 具有多个构造函数的 MEF 构造函数参数

用于检索单个嵌套子实体的 Linq 方法语法

c# - Linq 的 FirstOrDefault 充当其他类型?

c# - EF LINQ to SQL,除以零错误,生成的查询将参数置于错误的顺序

ef-code-first - 如何创建和使用通用类 EntityTypeConfiguration<TEntity>

c# - Prism ( View 模型): Ensure a command does not get executed multiple times simultaneously

c# - 在没有请求的情况下在 asp.net webform 自定义类中制作相对 url

c# - 如何从 3 个 double 列表中获取 float 组?