Nik*_*tov 5 linq group-by week-number entity-framework-core .net-core
在Entity Framework 6中,我可以使用SqlFunctions.DatePart()方法:
var byWeek = data.GroupBy(x => SqlFunctions.DatePart("week", x.Date));
Run Code Online (Sandbox Code Playgroud)
但是这些类(DbFunctions并且SqlFunctions在Entity Framework Core中不可用)(参考)。
所以我的问题是如何在实体框架核心中按周分组?
我目前针对缺失功能的解决方法是
var firstMondayOfYear = this.GetFirstMondayOfYear(DateTime.Now.Year);
var entries =
this.entitiesService.FindForLastMonths(this.CurrentUser.Id, 6)
.GroupBy(x => ((int)(x.Date - firstMondayOfYear).TotalDays / 7))
Run Code Online (Sandbox Code Playgroud)
功能GetFirstMondayOfYear:
private DateTime GetFirstMondayOfYear(int year)
{
var dt = new DateTime(year, 1, 1);
while (dt.DayOfWeek != DayOfWeek.Monday)
{
dt = dt.AddDays(1);
}
return dt;
}
Run Code Online (Sandbox Code Playgroud)
该分组给出了当年的周数和前几年的负值。
稍后您可以使用此 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}";
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1878 次 |
| 最近记录: |