2013-09-22 31 views
3

我需要爲SQL Server使用實體框架(代碼優先方法)爲ASP.NET Web應用程序生成一些星期摘要。實體框架和按星期分組的星期開始日集

更多的應用程序正在客戶端運行,服務器僅通過OData(Breeze.js)提供對實體的訪問。不幸的是微風不支持聚合函數,所以我要實現一些控制器操作的服務器端,對於一些更復雜的查詢需要,比如這一個:

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; 

但是我在實體框架中找不到任何解決方案。是否可以在初始化DbContext之後或之中運行某個查詢以設置DATEFIRST

回答

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), 
       ... 
      }; 
+0

這應當引起週日落入前一週,使得週一的一週新的開始。在一年的第一週內可能會出現奇怪的情況,所以請確保在這種情況下代碼仍然有效。 –

相關問題