EntityFramework 根据时间筛选数据
需求:根据当前时间,获取条件合适的数据,其中截止时间只比较日期。
1. 运行会报错的版本:
var lifeWorkEventBatch = clientRepositoryContainer.LifeWorkEventBatchRepository.FindAll(lfe => lfe.SelectionStartTime <= DateTime.Now && lfe.SelectionEndTime >= DateTime.Now.Date).FirstOrDefault();
这里查资料得知:sql里面没有根据当前日期再获取Date的函数,因此不能转换成功,直接报错。
2.比较整个时间,不取出当前日期进行比较,有bug:
var lifeWorkEventBatch = clientRepositoryContainer.LifeWorkEventBatchRepository.FindAll(lfe => lfe.SelectionStartTime <= DateTime.Now && lfe.SelectionEndTime >= DateTime.Now).FirstOrDefault();
该linq转化为sql语句为:
SELECT
[Extent1].[pkLifeWorkEventBatch] AS [pkLifeWorkEventBatch],
[Extent1].[LifeWorkEventBatchCode] AS [LifeWorkEventBatchCode],
[Extent1].[SelectionStartTime] AS [SelectionStartTime],
[Extent1].[SelectionEndTime] AS [SelectionEndTime],
[Extent1].[Status] AS [Status],
[Extent1].[Description] AS [Description],
[Extent1].[CreateOn] AS [CreateOn],
[Extent1].[CreateBy] AS [CreateBy],
[Extent1].[LastModifyOn] AS [LastModifyOn],
[Extent1].[LastModifyBy] AS [LastModifyBy]
FROM [dbo].[LifeWorkEventBatch] AS [Extent1]
WHERE ([Extent1].[SelectionStartTime] <= (SysDateTime())) AND ([Extent1].[SelectionEndTime] >= (SysDateTime()))
3.实现需求的无错版本:
var dateTimeNow = DateTime.Now;
var lifeWorkEventBatch = clientRepositoryContainer.LifeWorkEventBatchRepository.FindAll(lfe => lfe.SelectionStartTime <= dateTimeNow && lfe.SelectionEndTime >= dateTimeNow.Date).FirstOrDefault();
转化后的sql
exec sp_executesql N'SELECT
[Extent1].[pkLifeWorkEventBatch] AS [pkLifeWorkEventBatch],
[Extent1].[LifeWorkEventBatchCode] AS [LifeWorkEventBatchCode],
[Extent1].[SelectionStartTime] AS [SelectionStartTime],
[Extent1].[SelectionEndTime] AS [SelectionEndTime],
[Extent1].[Status] AS [Status],
[Extent1].[Description] AS [Description],
[Extent1].[CreateOn] AS [CreateOn],
[Extent1].[CreateBy] AS [CreateBy],
[Extent1].[LastModifyOn] AS [LastModifyOn],
[Extent1].[LastModifyBy] AS [LastModifyBy]
FROM [dbo].[LifeWorkEventBatch] AS [Extent1]
WHERE ([Extent1].[SelectionStartTime] <= @p__linq__0) AND ([Extent1].[SelectionEndTime] >= @p__linq__1)',N'@p__linq__0 datetime2(7),@p__linq__1 datetime2(7)',@p__linq__0='2019-07-31 12:52:40.5630849',@p__linq__1='2019-07-31 00:00:00'
从两次转化后的sql语句可以看出,先获取系统日期,再在linq中使用,则直接转化成为了日期类型的参数。
EntityFramework 根据时间筛选数据的更多相关文章
- 开始VS 2012中LightSwitch系列的第4部分:太多信息了!使用查询来排序和筛选数据
[原文发表地址] Beginning LightSwitch in VS 2012 Part 4: Too much information! Sorting and Filtering Data ...
- Python实战171201筛选数据
Python应用:网络编程,系统网络运维,3D游戏开发,图形界面开发,科学与数字计算,web后端. 对着慕课的练习,果然慕课的实战也是差距很大-------centos7 -Python3.6.3 筛 ...
- Django中条件过滤:按时间筛选
你有没有遇到过,需要按时间筛选的问题? 我在models中的字段为dateTimeField,那么我该如何构造一个时间格式来和它比较呢? 索性我们有datetime模块 import datetime ...
- 20170813xlVBA跨表筛选数据
一.数组方案 Sub CustomFilter() Dim Rng As Range, Arr As Variant Dim EndRow As Long, EndCol As Long Dim i ...
- pandas处理日期时间,按照时间筛选
pandas有着强大的日期数据处理功能,本期我们来了解下pandas处理日期数据的一些基本功能,主要包括以下三个方面: 按日期筛选数据 按日期显示数据 按日期统计数据 运行环境为 windows系统, ...
- SQL Server游标 C# DataTable.Select() 筛选数据 什么是SQL游标? SQL Server数据类型转换方法 LinQ是什么? SQL Server 分页方法汇总
SQL Server游标 转载自:http://www.cnblogs.com/knowledgesea/p/3699851.html. 什么是游标 结果集,结果集就是select查询之后返回的所 ...
- (六)Net Core项目使用Controller之一 c# log4net 不输出日志 .NET Standard库引用导致的FileNotFoundException探究 获取json串里的某个属性值 common.js 如何调用common.js js 筛选数据 Join 具体用法
(六)Net Core项目使用Controller之一 一.简介 1.当前最流行的开发模式是前后端分离,Controller作为后端的核心输出,是开发人员使用最多的技术点. 2.个人所在的团队已经选择 ...
- .NET LINQ 筛选数据
筛选数据 筛选指将结果集限制为只包含那些满足指定条件的元素的操作. 它又称为选择. 方法 方法名 说明 C# 查询表达式语法 Visual Basic 查询表达式语法 更多信息 OfType ...
- SharePoint 根据时间筛选
最近在整SP列表 老大要求用列表规范周报格式. 提出要在一个视图内查看上周一至周日的内容 翻了下资料想到了以下几种方法 1.在视图页面添加时间筛选器webpart,用参数传入列表筛选 2.在列表添加按 ...
随机推荐
- Spring Cloud 5大组件
服务发现——Netflix Eureka 客服端负载均衡——Netflix Ribbon 断路器——Netflix Hystrix 服务网关——Netflix Zuul 分布式配置——Spring C ...
- 《深入理解java虚拟机》读书笔记九——第十章
第十章 早期(编译期)优化 1.Javac的源码与调试 编译期的分类: 前端编译期:把*.java文件转换为*.class文件的过程.例如sun的javac.eclipseJDT中的增量编译器. JI ...
- AtCoder Beginner Contest 068 ABCD题
A - ABCxxx Time limit : 2sec / Memory limit : 256MB Score : 100 points Problem Statement This contes ...
- 第一个安卓app——计算器
几天前,我花了一天时间,结合这段时间所学知识开发出了一个简单的计算器,它由两个TextView和23个Button组成,代码会放在文章结尾. TextView TextView:上面一个TextVie ...
- 牛客CSP-S提高组赛前集训营4 赛后总结
复读数组 分成 3 种区间算答案: 一个块内的区间 两个块交界处,长度小于块长的区间 长度不小于块长的区间 对于第三种区间,容易发现每个区间的权值一样,只需要算出个数即可. 对于前两种空间,我的思路是 ...
- centos7搭建zabbix
参考:https://blog.csdn.net/xiaocong66666/article/details/82818893 安装所需的依赖包即可: yum install gcc gcc-c++ ...
- Selenium3+python自动化009- 多选框
多选框 # 随机选择多选框# sports=driver.find_elements_by_name("sport")# maxnum=len(sports)# num=rando ...
- linux - 从网上下载文件到服务器
命令格式 wget URL地址 实例 wget http://dev.mysql.com/get/Downloads/MySQL-5.6/mysql-5.6.33-linux-glibc2.5-x86 ...
- 多源最短路(floyd算法)
Floyd算法: 如何简单方便的求出图中任意两点的最短路径 Floyd-Warshall算法(O(n)比较适用于边较多的稠密图(Dense Graph)) Floyd算法用来找出每对顶点之间的最短距离 ...
- Java EE 7 API
学习Java必备资源,下载链接: https://pan.baidu.com/s/1P1xzuoGJCIuZlYBbPSbM_Q 提取码: dtui 复制这段内容后打开百度网盘手机App,操作更方便哦