C#实践问题:如何在LINQ to Entities 查询中,计算两个日期之间相差的天数?

在LINQ to Entities 查询中,使用常规日期格式转换函数Convert.ToDateTime()以及日期比较函数TimeSpan.Subtract().Days,都很麻烦而且会出错:LINQ to Entities不能识别方法。。。

那么要想在LINQ to Entities 查询中,计算两个日期之间相差的天数,该怎么办呢?

别慌,.NET已经为你准备好了工具!

System.Data.Entity提供公共语言运行时(CLR)方法,公开EDM规范函数。
用于System.Data.Entity.DbContext或System.Data.Entity.Core.Objects.ObjectContext。
LINQ to Entities查询。

命名空间 System.Data.Entity 包含许多有用的方法,每一类方法都包含好多个重载方法。其中包括但不限于:

AddDays: public static DateTime? AddDays(DateTime? dateValue, int? addValue);

摘要:
         //当用作LINQ to Entities查询的一部分时,此方法将调用规范
         // AddDays EDM功能可将给定天数添加到日期/时间。
        //
         //参数:
         // dateValue:
         //输入日期/时间。
        //
         // addValue:
         //要添加的天数。
        //
         //返回结果:
         //结果日期/时间。
        //
         //备注:
         //你不能直接调用这个函数。 此功能只能出现在
         //一个LINQ to Entities查询。 此功能转换为相应的功能
         //在数据库中

AddHours:public static TimeSpan? AddHours(TimeSpan? timeValue, int? addValue);

//
         //摘要:
         //当用作LINQ to Entities查询的一部分时,此方法将调用规范
         // AddHours EDM功能可将给定的小时数添加到时间跨度。
        //
         //参数:
         // timeValue:
         //输入日期/时间。
        //
         // addValue:
         //要添加的小时数。
        //
         //返回结果:
         //结果时间跨度
        //
         //备注:
         //你不能直接调用这个函数。 此功能只能出现在
         //一个LINQ to Entities查询。 此功能转换为相应的功能
         //在数据库中

以及AddMicroseconds,AddMinutes,AddMonths等以Add开头的方法就不一一介绍了,感兴趣的可以用vs自行查看。

AsNonUnicode:public static string AsNonUnicode(string value);

//
         //摘要:
         //当用作LINQ to Entities查询的一部分时,此方法充当运算符
         //确保输入被视为非Unicode字符串。
        //
         //参数:
         //值:
         //输入字符串
        //
         //返回结果:
         //输入字符串被视为非Unicode字符串。
        //
         //备注:
         //你不能直接调用这个函数。 此功能只能出现在
         //一个LINQ to Entities查询。 此函数会影响LINQ查询的转换方式
         //可以在数据库中运行的查询。

以及AsUnicode。

DiffDays:public static int? DiffDays(DateTime? dateValue1, DateTime? dateValue2);

//
         //摘要:
         //当用作LINQ to Entities查询的一部分时,此方法将调用规范
         // DiffDays EDM函数用于计算两个日期/时间之间的天数。
        //
         //参数:
         // dateValue1:
         //第一个日期/时间
        //
         // dateValue2:
         //第二个日期/时间
        //
         //返回结果:
         //第一个和第二个日期/时间之间的天数。
        //
         //备注:
         //你不能直接调用这个函数。 此功能只能出现在
         //一个LINQ to Entities查询。 此功能转换为相应的功能
         //在数据库中

以Differ开头的方法也有很多,就不一一介绍了。

这里有一个问题,上述的DiffDays方法能返回两个日期之间相差的天数,但是并没有强调顺序,也就是说传入两个日期,虽然能知道相隔的天数,但是却不知道谁比谁多。

同样是相隔两天,早两天和晚两天,意义上可能就差很多。

所以要根据自己的需要,灵活的使用各种工具方法。

不过,虽然文档中没有指出两个参数的顺序对结果的影响,但是经过实践,得知:第二个参数与第一个参数比较,大则为正,相等则为零,小则为负。

猜你喜欢

转载自blog.csdn.net/qq_40741855/article/details/83756337