EF日期格式筛选

原创 2017年01月03日 11:38:06

一、EF日期格式筛选,获取本年,本月,本日等

1.直接使用DateTime的部分值相等

//获取上一个月
            DateTime date = DateTime.Now.AddMonths(-1);
            int count = _context.students.Where(q => 
            q.sbirthday.Value.Year == date.Year
            &&q.sbirthday.Value.Month== date.Month
            ).Count();

2.使用时间短筛选

//获取上2个月到今天
DateTime start = DateTime.Now.AddMonths(-2);
DateTime end = DateTime.Now;
List<student> list = _context.students.Where(q => q.sbirthday >= start && q.sbirthday < end)
    .ToList();
Console.WriteLine(list.Count);

二、EF日期格式筛选,方式2 ,使用SqlFunctions

在EF中日期筛选需要使用SqlFunctions,特别需要注意一下命名空间

namespace System.Data.Entity.SqlServer
{
    //
    // 摘要:
    //     包含在 Linq to Entities 中公开 SqlServer 方法的函数存根。
    public static class SqlFunctions


时间差计算函数,对应SqlServer数据库的DATEDIFF函数

        //
        // 摘要:
        //     返回所指定开始日期和结束日期之间的指定日期部分边界的计数。
        //
        // 参数:
        //   datePartArg:
        //     要计算时间间隔差值的日期部分。
        //
        //   startDate:
        //     第一个日期。
        //
        //   endDate:
        //     第二个日期。
        //
        // 返回结果:
        //     两个日期之间的时间间隔数。
        [DbFunction("SqlServer", "DATEDIFF")]
        [SuppressMessage("Microsoft.Usage", "CA1801:ReviewUnusedParameters", MessageId = "startDate")]
        [SuppressMessage("Microsoft.Usage", "CA1801:ReviewUnusedParameters", MessageId = "endDate")]
        [SuppressMessage("Microsoft.Usage", "CA1801:ReviewUnusedParameters", MessageId = "datePartArg")]
        public static int? DateDiff(string datePartArg, DateTime? startDate, DateTime? endDate);
关于DATEDIFF函数,计算差值为指定类型的总差值:

	select DATEDIFF(day,'2016-1-1','2017-1-1');
	select DATEDIFF(month,'2016-1-1','2017-1-1');
        select DATEDIFF(year,'2016-1-1','2017-1-1');



使用实例:

DateTime date = DateTime.Now.AddMonths(-1);
//本年
int count1 = _member.DbSet.Where(q => SqlFunctions.DateDiff("year", q.ActiveTime, date) == 0).Count();
//本月
int count2 = _member.DbSet.Where(q => SqlFunctions.DateDiff("month", q.ActiveTime, date) == 0).Count();
//本天
int count3 = _member.DbSet.Where(q => SqlFunctions.DateDiff("day", q.ActiveTime, date) == 0).Count();

自动生成的Sql代码:

exec sp_executesql N'SELECT 
[Extent1].[ActiveAmount] AS [ActiveAmount]
FROM [dbo].[Member_Info] AS [Extent1]
WHERE ([Extent1].[IsActive] = 1) 
AND (0 = (DATEDIFF(day, [Extent1].[ActiveTime], @p__linq__0)))',N'@p__linq__0 datetime2(7)',@p__linq__0='2017-01-02 00:00:00'


更多参考:

http://blog.163.com/m13864039250_1/blog/static/21386524820141184595445/

版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

Windows 2008 R2 做RMAN定时自动备份;日期格式影响日志文件生成

编写的脚本 Level0备份脚本 run{ configure maxsetsize to 40g;   backup incremental level 0 database...

数据库转换日期格式

oracle设置日期格式

Jquery控制My97DatePicker控件的日期格式

最近的项目,要取时间段进行统计,按照年月日时等方法,取按年统计的时候,我们希望时间控件只能选择年,按照月统计时候,我们希望只能选择年月这两项,因此写了这个小程序。 firefox测试可用。 ...

验证日期格式date

6.2日期格式处理

  • 2013-06-14 22:07
  • 1.25MB
  • 下载

java日期格式

获取指定的时间的上一年,上个月,上一天 String aa="2016/10/12"; Calendar c = Calendar.getInstance(); DateForm...

SQL Server日期格式大全

  • 2009-07-27 11:10
  • 30KB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)