咨询区

  • Aza

在 Entity Framework 6 中,我可以用 SqlFunctions.DatePart() 函数来实现,参考如下代码:

var byWeek = data.GroupBy(x => SqlFunctions.DatePart("week", x.Date));

现在的问题是, Entity Framework Core 中不提供如 DbFunctionsSqlFunctions 方法,这就很尴尬了,请问我该如何解决呢?

回答区

  • cyptus

既然没有现成的函数,可以自己实现一个,将 sql 中的 datepart 方法用 C# 中的 DbFunctionAttribute 给标注上,这样做的好处是告诉 efcore 不要去以 string 方式处理 detepart 参数,参考代码如下:

DbContext:

public int? DatePart(string datePartArg, DateTime? date) => throw new Exception();public void OnModelCreating(DbModelBuilder modelBuilder)
{var methodInfo = typeof(DbContext).GetRuntimeMethod(nameof(DatePart), new[] { typeof(string), typeof(DateTime) });modelBuilder.HasDbFunction(methodInfo).HasTranslation(args => new SqlFunctionExpression(nameof(DatePart), typeof(int?), new[]{new SqlFragmentExpression(args.ToArray()[0].ToString()), args.ToArray()[1]}));
}

查询方式:

repository.GroupBy(x => dbContext.DatePart("week", x.CreatedAt));

更多信息参考 github:https://github.com/aspnet/EntityFrameworkCore/issues/10404

  • Nikolay Kostov

确实有些麻烦,我现在的变通方法是除7实现,首先自定义个方法,代码如下:

private DateTime GetFirstMondayOfYear(int year)
{var dt = new DateTime(year, 1, 1);while (dt.DayOfWeek != DayOfWeek.Monday){dt = dt.AddDays(1);}return dt;
}

然后在分组的时候计算。

var firstMondayOfYear = this.GetFirstMondayOfYear(DateTime.Now.Year);var entries = this.entitiesService.FindForLastMonths(this.CurrentUser.Id, 6).GroupBy(x => ((int)(x.Date - firstMondayOfYear).TotalDays / 7))

这个分组会得到当前年的周个数,负值是表示挂在前一年的, 之后就可以通过下面的属性方法得到当前的周名称。

public string WeekName
{get{var year = DateTime.Now.AddYears((int)Math.Floor(this.WeekNumber / 52.0)).Year;var weekNumber = this.WeekNumber % 52;while (weekNumber < 0){weekNumber += 52;}return $"{year}, W{weekNumber}";}
}

点评区

sql处理稍微复杂一点,用ef处理起来还是有些麻烦的,没啥好说的,学习了。

如何使用 EF Core 按周 对数据分组?相关推荐

  1. EF Core 中实现 动态数据过滤器

    前言 在项目开发中,我们很多时候都会设计  软删除.所属用户 等等一系列字段 来方便我们在业务查询的时候进行各种过滤 然后引申的问题就是: 在业务查询的时候,我们要如何加上这些条件?或者动态禁用某些查 ...

  2. EF Core中高效批量删除、更新数据的Zack.EFCore.Batch发布三个新特性

    Zack.EFCore.Batch是一个支持在Entity Framework Core中高效删除和更新数据的开源库.我们知道,EF Core中不支持高效的删除和更新数据,所有的更新和操作都是逐条数据 ...

  3. 查缺补漏系统学习 EF Core 6 - 数据查询

    这是 EF Core 系列的第四篇文章,上一篇文章讲述了 EF Core 中的实体迁移与数据播种. 这篇文章盘点一下 EF Core 的几种数据查询方式,内容较多分上下两篇. 点击上方或后方蓝字,阅读 ...

  4. 查缺补漏系统学习 EF Core 6 - 批量操作

    推荐关注「码侠江湖」加星标,时刻不忘江湖事 这是 EF Core 系列的第七篇文章,上一篇文章讲述了 EF Core 中的实体数据修改. 这篇文章讲一讲 EF Core 如何进行批量操作. 在众多的 ...

  5. mysql多租户schema复制,Asp.net core下利用EF core实现从数据实现多租户(3): 按Schema分离 附加:EF Migration 操作...

    前言 前段时间写了EF core实现多租户的文章,实现了根据数据库,数据表进行多租户数据隔离. 今天开始写按照Schema分离的文章. 其实还有一种,是通过在数据表内添加一个字段做多租户的,但是这种模 ...

  6. .net core发布 正在发现数据上下文_使用EF Core实现数据库读写分离

    以下文章来源于朝夕Net社区 ,作者Eleven 朝夕Net社区 朝气.丰富.活跃的.Net社区,朝夕教育携百万粉丝共同打造!有技术,有感悟,有新闻,有照片,有故事,还有梦想! [精选转载]| 作者/ ...

  7. [EF Core]数据迁移(二)

    摘要 在实际项目中,大多都需要对业务逻辑以及操作数据库的逻辑进行分成操作,这个时候该如何进行数据的迁移呢? 步骤 上篇文章:EF Core数据迁移操作 比如,我们将数据上下文放在了Data层. 看一下 ...

  8. ABP Framework:移除 EF Core Migrations 项目,统一数据上下文

    原文:Unifying DbContexts for EF Core / Removing the EF Core Migrations Project[1] 导读:软件开发的一切都需要平衡 在 AB ...

  9. EF Core 数据变更自动审计设计

    EF Core 数据变更自动审计设计 Intro 有的时候我们需要知道每个数据表的变更记录以便做一些数据审计,数据恢复以及数据同步等之类的事情, EF 自带了对象追踪,使得我们可以很方便的做一些审计工 ...

最新文章

  1. 计算机基础知识综合试卷一,计算机基础知识试题及答案a
  2. eclipse中开发python
  3. 手游研发CJ抱大腿指南
  4. python求平均成绩 输入用空格分隔的两个代码_在Python2.7中,如何计算以空格分隔的多个输入?...
  5. ik mysql热加载分词_Elasticsearch 之(25)重写IK分词器源码来基于mysql热更新词库...
  6. 百度之星 2019 预赛三 A 最短路 1
  7. 提高ipad浏览器下大尺寸xml文件解析的性能
  8. for-each keyword
  9. 转:有关常量的知识点
  10. maya如何导出ue4_Maya建模师分享干货的时间到啦,教你用UE4如何导入动画
  11. Linux进程间通信(匿名管道)
  12. Ubuntu下华为方舟编译器环境安装
  13. PAPI性能测试工具的安装、使用及实例
  14. [转载] python基础 - namedtuple和enum
  15. python3操作shp文件
  16. Gantt - attachEvent事件监听 - (必须)拥有返回值事件
  17. Windows驱动开发WDM
  18. Java练习10:输入两个正整数m和n,求其最大公约数和最小公倍数
  19. 现场总线PROFIBUS-DP在风力发电系统中的应用(内附详细说明)
  20. 基金会要申请银行账户吗

热门文章

  1. 01. Node js Hello world
  2. 通过 Lotus Domino Java 代理消费 Web 服务
  3. Exchange中的数据库文件
  4. netty实现客户端服务端心跳重连
  5. 8 旋转数组的最小数字
  6. 大数据:Parquet文件存储格式
  7. Linux下画原理图和PCB
  8. 应用系统日志采集解决方案
  9. Linux Swap分区设定
  10. 40个最好的Tumblr主题