如何在Entity Framework Core中按周分组? [英] How to group by week in Entity Framework Core?

查看:311
本文介绍了如何在Entity Framework Core中按周分组?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

在Entity Framework 6中,我可以使用 SqlFunctions。 DatePart() 方法:

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

但是这些类( DbFunctions SqlFunctions 在实体框架核心中不可用)(参考)。

所以我的问题是如何在Entity Framework核心中按周分组?

解决方案

我缺少的功能的当前解决方法是

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

函数 GetFirstMondayOfYear

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

return dt;
}

此分组给出当年的周数和前几年的负值。



稍后,您可以使用此getter获取星期名称:

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

返回${year},W {weekNumber};
}
}


In Entity Framework 6 I can use SqlFunctions.DatePart() method:

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

But these classes (DbFunctions and SqlFunctions are not available in Entity Framework Core) (reference).

So my question is How can I group by week in Entity Framework core?

解决方案

My current workaround for the missing functionality is

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

The function GetFirstMondayOfYear:

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

    return dt;
}

This grouping gives the week number for the current year and negative values for previous years.

Later you can get the week name by using this getter:

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}";
    }
}

这篇关于如何在Entity Framework Core中按周分组?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆