我希望按周分组我的数据,如下所示:
var result = stats.GroupBy(i => SqlFunctions.DatePart("week", i.date))
.Select(g => new ReportModel
{
clicks = g.Select(x => x.clicks).Sum(),
impressions = g.Select(x => x.impressions).Sum(),
...
});
Run Code Online (Sandbox Code Playgroud)
但我得到这个错误:
只能从LINQ到实体调用此函数.
有什么问题,我该如何解决?
Evk*_*Evk 11
SqlFunctions.DatePart(和其他此类函数)不能作为常规方法调用.它只能用作数据库查询的一部分(with IQueryable).所以你必须使用另一种方法,例如:
stats.GroupBy(i => CultureInfo.CurrentCulture.Calendar.GetWeekOfYear(
i.date, CalendarWeekRule.FirstDay, DayOfWeek.Monday));
Run Code Online (Sandbox Code Playgroud)
注意所使用的文化以及GetWeekOfYear(一年中的第一周和一周的第一天)的参数.
小智 7
或者您可以获取一周中第一天的日期,然后按该日期分组。
获取一周中第一天的日期。您可以使用此代码:
public static class DateTimeExtensions
{
public static DateTime StartOfWeek(this DateTime dt, DayOfWeek startOfWeek)
{
int diff = dt.DayOfWeek - startOfWeek;
if (diff < 0)
{
diff += 7;
}
return dt.AddDays(-1 * diff).Date;
}
}
Run Code Online (Sandbox Code Playgroud)
然后你可以按一周的第一个日期分组,如下所示:
stats.GroupBy(i => i.date.StartOfWeek(DayOfWeek.Monday));
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3594 次 |
| 最近记录: |