2017-03-08 149 views
3

在实体框架6我可以使用SqlFunctions.DatePart()方法:如何在Entity Framework Core中按周分组?

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

但这些类(DbFunctionsSqlFunctions不是实体框架提供的核心)(reference)。

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

+3

由于目前所有的EF核心的查询有'GroupBy'条款都是在内存中处理,你可以安全地使用'x.Date.DayOfYear/7 '或者类似的东西。 –

回答

2

我失踪的功能当前的解决方法是

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)).Year; 
     var weekNumber = this.WeekNumber % 52; 
     while (weekNumber < 0) 
     { 
      weekNumber += 52; 
     } 

     return $"{year}, W{weekNumber}"; 
    } 
} 
相关问题