2017-03-08 144 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}"; 
    } 
} 
相關問題