关闭

EF日期格式筛选

标签: EF日期格式筛选
2199人阅读 评论(0) 收藏 举报
分类:

一、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/

0
0
查看评论
发表评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场

在使用EF时,想要比较字符串类型的日期时

在使用EF时,想要比较字符串类型的日期时在使用EF时,想要比较字符串类型的日期时,参考以下:SQL语句:1)select * from TableName where StartTime > ‘201...
  • yangxinyue315
  • yangxinyue315
  • 2015-04-09 15:34
  • 1056

[.NET] EF LINQ 按时间对数据分类汇总

发现国内弄 Mvc 和 WebAPI 的人简直少的可怜啊;前段时间发了大量的 WebAPI 的相关博文看的人不多;可以说是无人问津。 在对数据的操作中,对一堆数据的分类汇总是比较常见的,特别是按照时间...
  • qiujuer
  • qiujuer
  • 2014-12-11 17:10
  • 3204

linq中datetime取日期格式部分

linq中想对数据记录按日期进行分组,即得到每天的数据汇总,用C#的d.ToShortDateString()会报错。(其中,d为DateTime类型的变量)。 原因是EF不识别C#的语法。...
  • liuxufeiyang000
  • liuxufeiyang000
  • 2016-12-07 17:09
  • 3934

EntityFramework Linq 按年月统计查询

Expression> wh = c => c.DimissionId != null; DateTime dtValueStart = DateTime.MinValue; ...
  • duanwenzhi00
  • duanwenzhi00
  • 2016-09-20 17:23
  • 1803

EF日期筛选异常:SqlServer.DATEDIFF”函数的 DATEPART 参数必须是文字字符串。

一、在使用EF日期筛选的时候可能会出现这样的异常:“SqlServer.DATEDIFF”函数的 DATEPART 参数必须是文字字符串。” 出现异常的代码: DateTime date = Da...
  • u011127019
  • u011127019
  • 2017-01-03 11:48
  • 1616

EF获取当天的数据

前面试了很多的方法db.Task.Where(m=>m.AssignDate.value.Date == DateTime.Now.Date);结果报错了 不支持指定的类型成员“Date”。只支持...
  • sbt0198
  • sbt0198
  • 2016-06-28 16:43
  • 1765

ef根据年月进行分组

/// /// 根据年月进行分组 数据库日期格式为 yyyy-MM-dd HH:mm:ss /// public static void YearM...
  • c13_tianming
  • c13_tianming
  • 2015-09-06 11:06
  • 836

[.NET] EF LINQ 按时间对数据分类汇总

发现国内弄 Mvc 和 WebAPI 的人简直少的可怜啊;前段时间发了大量的 WebAPI 的相关博文看的人不多;可以说是无人问津。 在对数据的操作中,对一堆数据的分类汇总是比较常见的,特别是按照时间...
  • qiujuer
  • qiujuer
  • 2014-12-11 17:10
  • 3204

EF实现分页查询+条件查询+排序

先来看看几个LINQ to SQL的几个函数。  Take     说明:获取集合的前n个元素;延迟。即只返回限定数量的结果集。     var q = (     from e in d...
  • Augus3344
  • Augus3344
  • 2015-04-30 09:21
  • 8145

EF联合查询的新用法

用EF很多年了,做联合查询时,只知道linq和lambda两种语法,今天朋友发了一个链接,打开看后发现是EF内置的新的关于联合查询的方法,赶紧抄录下来,以备后用。 现在先把这几种方法,各写一个例子,便...
  • foren_whb
  • foren_whb
  • 2016-04-08 13:30
  • 995
    个人资料
    • 访问:1312096次
    • 积分:14983
    • 等级:
    • 排名:第909名
    • 原创:452篇
    • 转载:152篇
    • 译文:1篇
    • 评论:149条
    最新评论