2014-01-07 33 views
15

mycode的:如何按日期沒有日期使用實體框架組時間

//get data 
     var myData = from log in db.OperationLogs 
        group log by log.CreateTime.Date into g 
        orderby g.Key 
        select new { CreateTime = g.Key, Count = g.Count() }; 

這個代碼將拋出像實體框架的異常不支持獲取日期的操作。 因爲log.createtime都有日期和時間,我想按日期分組,我應該怎麼做

+1

您可以編輯您的問題,包括確切的例外呢? –

回答

34

使用EntityFunctions.TruncateTime Method (Nullable<DateTime>)。它將被轉換爲生成的SQL查詢中的TRUNCATETIME() TSQL函數,該函數執行您所需要的操作:

返回表達式,並截斷時間值。

所以,你的代碼應該如下:

//get data 
var myData = from log in db.OperationLogs 
      group log by EntityFunctions.TruncateTime(log.CreateTime) into g 
      orderby g.Key 
      select new { CreateTime = g.Key, Count = g.Count() }; 
+0

thx,它可以幫助我 – Arthas

+20

如果您使用EF6,EntityFunctions已過時,請將其替換爲DbFunctions(並且謝謝,答案幫助我:)) –

+1

TruncateTime仍然返回時區,所以如果db沒有得到所需的結果類型是datetimeoffset。它會工作,如果類型是日期時間。 –

-1
 var result = from s in entitiesModel.TvysFuelTankDatas 
          orderby s.Datetime ascending 
          group s by new { y = s.Datetime.Year, m = s.Datetime.Month + "/", d = s.Datetime.Day + "/" } into g 
          select new WellDrillData { Date = Convert.ToDateTime(g.Key.d.ToString() + g.Key.m.ToString() + g.Key.y.ToString()), Depth = (double)g.Sum(x => x.Difference) }; 

       List<WellDrillData> dailyFuelConsumptions = result.ToList();