EF日期格式筛选_EF常用日期筛选逻辑整理

2024-05-30 22:32

本文主要是介绍EF日期格式筛选_EF常用日期筛选逻辑整理,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

一、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');


注:对应需要判断大于多少天或月的处理逻辑需要使用表达式>数字,例如:大于3天的记录 DATEDIFF(Day,'xx','xx')>3
判断少于多少天需要表达式<=数字

使用实例:

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'

三、筛选指定月日时间段之间的数据,不关心哪一年

原理使用 Sql中 的  DayOfYear ,当前时间的本年中第几天,在开始时间结束时间的本年中第几天来判断。

一下是EF Core中的代码示例:

            if (payStart != null)query = query.Where(q => q.FeeTime.DayOfYear >= payStart.Value.DayOfYear);if (payEnd != null)query = query.Where(q => q.FeeTime.DayOfYear < payEnd.Value.DayOfYear);

执行Sql 时生成的代码:

exec sp_executesql N'SELECT [q].[ID], [q].[CompanyID], [q].[CompanyName], xxxxxxxx
FROM [ProjectInfo] AS [q]
WHERE (DATEPART(dayofyear, [q].[FeeTime]) >= @__payStart_Value_DayOfYear_0) AND (DATEPART(dayofyear, [q].[FeeTime]) < @__payEnd_Value_DayOfYear_1)
ORDER BY [q].[CreateTime] DESC, [q].[State]
OFFSET @__p_2 ROWS FETCH NEXT @__p_3 ROWS ONLY',N'@__payStart_Value_DayOfYear_0 int,@__payEnd_Value_DayOfYear_1 int,@__p_2 int,@__p_3 int',@__payStart_Value_DayOfYear_0=206,@__payEnd_Value_DayOfYear_1=231,@__p_2=0,@__p_3=10

更多参考:

sqlserver计算时间差DATEDIFF 函数

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

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

这篇关于EF日期格式筛选_EF常用日期筛选逻辑整理的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1016992

相关文章

C++对象布局及多态实现探索之内存布局(整理的很多链接)

本文通过观察对象的内存布局,跟踪函数调用的汇编代码。分析了C++对象内存的布局情况,虚函数的执行方式,以及虚继承,等等 文章链接:http://dev.yesky.com/254/2191254.shtml      论C/C++函数间动态内存的传递 (2005-07-30)   当你涉及到C/C++的核心编程的时候,你会无止境地与内存管理打交道。 文章链接:http://dev.yesky

hevc和H.264格式的区别

HEVC(High Efficiency Video Coding)和H.264(也称为Advanced Video Coding,AVC)都是视频压缩标准,但它们之间存在一些显著的区别,主要集中在压缩效率、资源需求和兼容性方面。 压缩效率 HEVC,也被称为H.265,提供了比H.264更高的压缩效率。这意味着在相同的视频质量下,HEVC能够以大约一半的比特率进行编码,从而减少存储空间需求和

公共筛选组件(二次封装antd)支持代码提示

如果项目是基于antd组件库为基础搭建,可使用此公共筛选组件 使用到的库 npm i antdnpm i lodash-esnpm i @types/lodash-es -D /components/CommonSearch index.tsx import React from 'react';import { Button, Card, Form } from 'antd'

React+TS前台项目实战(十七)-- 全局常用组件Dropdown封装

文章目录 前言Dropdown组件1. 功能分析2. 代码+详细注释3. 使用方式4. 效果展示 总结 前言 今天这篇主要讲全局Dropdown组件封装,可根据UI设计师要求自定义修改。 Dropdown组件 1. 功能分析 (1)通过position属性,可以控制下拉选项的位置 (2)通过传入width属性, 可以自定义下拉选项的宽度 (3)通过传入classN

帆软报表常用操作

欢迎来到我的博客,代码的世界里,每一行都是一个故事 🎏:你只管努力,剩下的交给时间 🏠 :小破站 帆软报表常用操作 多序号实现使用数据集作为参数空白页或者竖线页修改页面Title金额,或者保留两位小数等等设置日期格式显示图片使用公式 多序号实现 所用函数为SEQ(),如果一张报表中需要用到多个序号,那么就需要加入参数SEQ(1),SEQ(

常用MQ消息中间件Kafka、ZeroMQ和RabbitMQ对比及RabbitMQ详解

1、概述   在现代的分布式系统和实时数据处理领域,消息中间件扮演着关键的角色,用于解决应用程序之间的通信和数据传递的挑战。在众多的消息中间件解决方案中,Kafka、ZeroMQ和RabbitMQ 是备受关注和广泛应用的代表性系统。它们各自具有独特的特点和优势,适用于不同的应用场景和需求。   Kafka 是一个高性能、可扩展的分布式消息队列系统,被设计用于处理大规模的数据流和实时数据传输。它

BD错误集锦8——在集成Spring MVC + MyBtis编写mapper文件时需要注意格式 You have an error in your SQL syntax

报错的文件 <?xml version="1.0" encoding="UTF-8" ?><!DOCTYPE mapperPUBLIC "-//mybatis.org//DTD Mapper 3.0//EN""http://mybatis.org/dtd/mybatis-3-mapper.dtd"><mapper namespace="com.yuan.dao.YuanUserDao"><!

XMG 常用的手势

// 创建点按手势     UITapGestureRecognizer *tap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(tap:)];    tap.numberOfTabsRequired=2; //点击的次数

Avalonia 常用控件二 Menu相关

1、Menu 添加代码如下 <Button HorizontalAlignment="Center" Content="Menu/菜单"><Button.Flyout><MenuFlyout><MenuItem Header="打开"/><MenuItem Header="-"/><MenuItem Header="关闭"/></MenuFlyout></Button.Flyout></B

el-upload 上传图片及回显照片和预览图片,文件流和http线上链接格式操作

<div v-for="(info, index) in zsjzqwhxqList.helicopterTourInfoList" :key="info.id" >编辑上传图片// oss返回线上地址http链接格式:<el-form-itemlabel="巡视结果照片":label-width="formLabelWidth"><el-upload:action="'http: