Entity Frameworkコアで週ごとにグループ化する方法

.net-core entity-framework-core group-by linq week-number

質問

Entity Framework 6では、 SqlFunctions.DatePart()メソッドを使用できます。

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

しかし、これらのクラス( DbFunctionsSqlFunctionsはEntity Frameworkコアでは使用できません)( 参照 )。

だから私の質問は、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;
}

このグループ化では、現在の年の週番号と前の年の負の値が表示されます。

後でこのゲッターを使用して週名を取得することができます:

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


Related

ライセンスを受けた: CC-BY-SA with attribution
所属していない Stack Overflow
このKBは合法ですか? はい、理由を学ぶ
ライセンスを受けた: CC-BY-SA with attribution
所属していない Stack Overflow
このKBは合法ですか? はい、理由を学ぶ