实体框架和按周分组,并设置周开始日

时间:2013-09-22 20:11:05

标签: sql-server linq entity-framework-5

我需要使用带有SQL Server的实体框架(代码优先方法)为ASP.NET Web应用程序生成一些周摘要。

更多的应用程序在客户端运行,服务器只通过OData(Breeze.js)提供对实体的访问。不幸的是,Breeze不支持聚合函数,因此我必须在服务器端实现一些控制器操作,以便进行一些更复杂的查询,例如:

var query = from r in db.Context.Records
            where r.MeasurementId == measurementId
            group r by SqlFunctions.DatePart("WK", r.Time) into g
            select new
            {
                Time = g.Min(r => r.Time),
                MinImport = g.Min(r => r.Import),
                ...
            };

我正在使用LINQ而不是上下文SqlQuery<T>,因为它返回IQueryable而不是IEnumerable

问题在于日期。记录按周分组,但是默认情况下星期几开始,但我需要它从星期一开始。通过运行:

,可以在普通SQL中轻松修复此问题
SET DATEFIRST 1;

但我在Entity Framework中找不到任何解决方案。是否可以在DbContext初始化之后或期间立即运行某些查询以设置DATEFIRST

1 个答案:

答案 0 :(得分:3)

尝试:

var query = from r in db.Context.Records
            where r.MeasurementId == measurementId
            group r by SqlFunctions.DatePart("WK", SqlFunctions.DateAdd("Day",-1,r.Time)) into g
            select new
            {
                Time = g.Min(r => r.Time),
                MinImport = g.Min(r => r.Import),
                ...
            };