日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

如何使用 EF Core 按周 对数据分组?

發布時間:2023/12/4 编程问答 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 如何使用 EF Core 按周 对数据分组? 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

咨詢區

  • Aza

在 Entity Framework 6 中,我可以用 SqlFunctions.DatePart() 函數來實現,參考如下代碼:

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

現在的問題是, Entity Framework Core 中不提供如 DbFunctions 和 SqlFunctions 方法,這就很尷尬了,請問我該如何解決呢?

回答區

  • cyptus

既然沒有現成的函數,可以自己實現一個,將 sql 中的 datepart 方法用 C# 中的 DbFunctionAttribute 給標注上,這樣做的好處是告訴 efcore 不要去以 string 方式處理 detepart 參數,參考代碼如下:

DbContext:

public?int??DatePart(string?datePartArg,?DateTime??date)?=>?throw?new?Exception();public?void?OnModelCreating(DbModelBuilder?modelBuilder) {var?methodInfo?=?typeof(DbContext).GetRuntimeMethod(nameof(DatePart),?new[]?{?typeof(string),?typeof(DateTime)?});modelBuilder.HasDbFunction(methodInfo).HasTranslation(args?=>?new?SqlFunctionExpression(nameof(DatePart),?typeof(int?),?new[]{new?SqlFragmentExpression(args.ToArray()[0].ToString()),?args.ToArray()[1]})); }

查詢方式:

repository.GroupBy(x?=>?dbContext.DatePart("week",?x.CreatedAt));

更多信息參考 github:https://github.com/aspnet/EntityFrameworkCore/issues/10404

  • Nikolay Kostov

確實有些麻煩,我現在的變通方法是除7實現,首先自定義個方法,代碼如下:

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

然后在分組的時候計算。

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

這個分組會得到當前年的周個數,負值是表示掛在前一年的, 之后就可以通過下面的屬性方法得到當前的周名稱。

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

點評區

sql處理稍微復雜一點,用ef處理起來還是有些麻煩的,沒啥好說的,學習了。

總結

以上是生活随笔為你收集整理的如何使用 EF Core 按周 对数据分组?的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。