3

我需要使用带有 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 而不是 context SqlQuery<T>,因为它返回IQueryable而不是IEnumerable.

问题在于日期。记录按周分组,但默认情况下周从星期日开始,但是我需要它从星期一开始。这可以很容易地在普通 SQL 中通过运行来修复:

SET DATEFIRST 1;

但我在实体框架中找不到任何解决方案。是否可以在初始化之后或DbContext初始化期间运行一些查询来设置DATEFIRST

4

1 回答 1

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),
                ...
            };
于 2013-09-23T08:41:58.447 回答