在写EF 时把时间格式化的做法

SELECT COUNT(l.LogSeq), date_format(l.CreateDate,‘%Y-%m‘) CreateDateByMonth FROM LOL l
WHERE l.CreateDate>=‘2017-1-1‘ AND l.CreateDate<=‘2017-8-16‘
GROUP BY CreateDateByMonth

把数据按照月份分组获取所需要的数据SQL语句变为EF,错误的写法:

//先做基本查询
                var querySql = from l in LOL
                               select new LOL
                               {
                                   LogSeq = l.LogSeq,
                                   CreateDate = l.CreateDate
                               };
                //条件在基本的查询中完成
                if (query.CreateDateStart != null)
                {
                    querySql = querySql.Where(t => t.CreateDate >= query.CreateDateStart);
                }
                if (query.CreateDateEnd != null)
                {
                    querySql = querySql.Where(t => t.CreateDate <= query.CreateDateEnd);
                }
                //然后把基本的条件过滤后的查询语句去分组
                var ret = querySql.GroupBy(t => new { t.CreateDate }).Select(s => new LOL
                {
                    LogSeq = s.Sum(m => m.LogSeq),
                    CreateDate = s.Key.CreateDate
                });

这样没有对数据进行安月分组,如果有时分秒的时候分组失败,如果把时间类型的字段tostring(“”yyyy-MM-dd“”)又不会被linq所承认,这时候需要把时间拆成年,月,日这样的多个字段。返回列表后再去拼接形成一个日期,正确写法如下:

   //先做基本查询,这里不可以使用select  new   LogClinicDataOperationInfo这样的写法,需要匿名去写linq
                var querySql = from l in _logClinicDataOperationRepository.Table
                               select new
                               {
                                   LogSeq = l.LogSeq,
                                   CreateDate=l.CreateDate,
                                   Year = l.CreateDate.Value.Year,
                                   Mounth= l.CreateDate.Value.Month,
                               };

                //条件在基本的查询中完成
                if (query.CreateDateStart != null)
                {
                    querySql = querySql.Where(t => t.CreateDate >= query.CreateDateStart);
                }
                if (query.CreateDateEnd != null)
                {
                    querySql = querySql.Where(t => t.CreateDate <= query.CreateDateEnd);
                }
                //然后把基本的条件过滤后的查询语句去分组,返回一条日期的年和月
                var result = querySql.GroupBy(t => new { t.Year, t.Mounth }).Select(s => new LogClinicDataOperationInfo
                {
                    Year = s.Key.Year,
                    Mounth = s.Key.Mounth,
                    Count = s.Count()
                });
时间: 2024-12-10 20:13:40

在写EF 时把时间格式化的做法的相关文章

深入理解Java:SimpleDateFormat安全的时间格式化 ;

想必大家对SimpleDateFormat并不陌生.SimpleDateFormat 是 Java 中一个非常常用的类,该类用来对日期字符串进行解析和格式化输出,但如果使用不小心会导致非常微妙和难以调试的问题,因为 DateFormat 和 SimpleDateFormat 类不都是线程安全的,在多线程环境下调用 format() 和 parse() 方法应该使用同步代码来避免问题.下面我们通过一个具体的场景来一步步的深入学习和理解SimpleDateFormat类. 一.引子 我们都是优秀的程

【转】深入理解Java:SimpleDateFormat安全的时间格式化

[转]深入理解Java:SimpleDateFormat安全的时间格式化 想必大家对SimpleDateFormat并不陌生.SimpleDateFormat 是 Java 中一个非常常用的类,该类用来对日期字符串进行解析和格式化输出,但如果使用不小心会导致非常微妙和难以调试的问题,因为 DateFormat 和 SimpleDateFormat 类不都是线程安全的,在多线程环境下调用 format() 和 parse() 方法应该使用同步代码来避免问题.下面我们通过一个具体的场景来一步步的深入

与时间相关的SQL语句/sql获取当前时间/sql时间比较/sql时间格式化

1. 当前系统日期.时间select getdate() 2. dateadd 在向指定日期加上一段时间的基础上,返回新的 datetime 值例如:向日期加上2天select dateadd(day,2,'2004-10-15') --返回:2004-10-1700:00:00.000 3. datediff 返回跨两个指定日期的日期和时间边界数.select datediff(day,'2004-09-01','2004-09-18') --返回:17 4. datepart 返回代表指定日

(转)关于SimpleDateFormat安全的时间格式化线程安全问题

想必大家对SimpleDateFormat并不陌生.SimpleDateFormat 是 Java 中一个非常常用的类,该类用来对日期字符串进行解析和格式化输出,但如果使用不小心会导致非常微妙和难以调试的问题,因为 DateFormat 和 SimpleDateFormat 类不都是线程安全的,在多线程环境下调用 format() 和 parse() 方法应该使用同步代码来避免问题.下面我们通过一个具体的场景来一步步的深入学习和理解SimpleDateFormat类. 一.引子 我们都是优秀的程

jsp自定义标签(时间格式化包括Long转时间)

1.jsp自带标签的格式化: jstl fmt 函数大全:主要针对格式化功能 Tags   fmt:requestEncoding fmt:setLocale fmt:timeZone fmt:setTimeZone fmt:bundle fmt:setBundle fmt:message fmt:param fmt:formatNumber fmt:parseNumber fmt:formatDate fmt:parseDate 先在jsp页面上增加: <%@ taglib uri="h

easyui的datetimebox时间格式化详解

今天公司让用easyui的datetimebox组件,而且还要让格式化成大家通用的那种,网上搜了很多,但差不多都是复制黏贴的,最后请教了下螃蟹. 感谢螃蟹抽空给做了个例子,现在拿出来和大家分享下,效果图如下这里主要实现了两个功能,一个是将时间格式化,一个是将年月日时分秒全都剥离了出来,可以随意调用. 具体的代码可到螃蟹博客主页看下,地址: http://www.itxxz.com/a/kuangjia/2014/0603/12.html easyui的datetimebox时间格式化详解,布布扣

【转】Asp.net中时间格式化的6种方法详细总结

1. 数据控件绑定时格式化日期方法: 代码如下: <asp:BoundColumn DataField="AddTime" HeaderText="添加时间" DataFormatString="{0:yyyy-MM-dd HH:mm}></asp:BoundColumn> <asp:BoundField DataField="AddTime" HeaderText="添加时间" Dat

Java日期工具类,Java时间工具类,Java时间格式化

Java日期工具类,Java时间工具类,Java时间格式化 >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> ?Copyright  蕃薯耀 2017年2月4日 15:03:27 星期六 http://www.cnblogs.co

input标签写CSS时需要注意的几点(先收藏)

(从已经死了一次又一次终于挂掉的百度空间人工抢救出来的,发表日期2014-05-05) 飞鱼的声纳顶部的搜索框让我头疼了很长时间,原因是总不能获得跨浏览器的统一样式.主要的问题有这么两个:一是input标签的高度不能统一,Firefox和IE中的高度始终不能一致:二是在IE浏览器中属性为text的input标签中的输入文字不像标准浏览器中的那样垂直居中显示,而是靠输入框的左上角显示. 为了彻底解决搜索框的这些问题,我以GreenGaint主题搜索框的样式为准,重写了一遍代码并且以像素为单位测量了