2013-04-09 51 views
1

我有這樣的Linq查詢,工作正常的GroupBy DAYOFWEEK Linq中

var test = (from c in context.ConsumptionSet 
      join pi in context.PropertiesInstanceSet on c.PropertiesInstanceID equals pi.PropertiesInstanceID 
      join ep in context.EquipmentPropertiesSet on pi.EquipmentPropertiesID equals ep.EquipmentPropertiesID 
      where (ep.EquipmentID == equipmentId && pi.ProprietesName == ProprietesName.Energy && c.Date <= DateTime.Today && c.Date >= EntityFunctions.AddDays(DateTime.Today, -7)) 
      group c by c.Date.Day into grp 
      select new 
      { 
       test = grp.Key, 
       value = (from c2 in grp select c2.Value).Max() 

      }).ToList(); 

但我想這組結果由DayOfWeek財產,而且好像LINQ的不允許它,因爲我得到這個錯誤時,我將替換爲group c by c.Date.DayOfWeekThe specified type member 'DayOfWeek' is not supported in LINQ to Entities

是否有解決此問題的方法?

+0

使用'SQL query'代替。 – gdoron 2013-04-09 16:28:04

+0

嘿,當在Stackoverflow上發佈一個問題時,你可以簡化你的代碼,所以它是特定的請。即刪除所有連接和where子句等,以使其他人更清楚。謝謝。 – pfeds 2015-08-20 03:48:40

回答

5

使用SqlFunctions.DatePart

var test = (from c in context.ConsumptionSet 
      join pi in context.PropertiesInstanceSet on c.PropertiesInstanceID equals pi.PropertiesInstanceID 
      join ep in context.EquipmentPropertiesSet on pi.EquipmentPropertiesID equals ep.EquipmentPropertiesID 
      where (ep.EquipmentID == equipmentId && pi.ProprietesName == ProprietesName.Energy && c.Date <= DateTime.Today && c.Date >= EntityFunctions.AddDays(DateTime.Today, -7)) 
      group c by SqlFunctions.DatePart("weekday", c.Date) into grp 
      select new 
      { 
       test = grp.Key, 
       value = (from c2 in grp select c2.Value).Max() 

      }).ToList(); 
+0

感謝您的回答。如果我想在我的「測試」屬性中獲得星期幾,我該怎麼做?因爲我仍然得到整數值 – kbaccouche 2013-04-09 16:35:47

+0

因爲'DATEPART' sql函數返回'int',所以你得到'int'。嘗試將其轉換爲'DayOfWeek'枚舉:'test =(DayOfWeek)grp.Key'。 – MarcinJuraszek 2013-04-09 16:36:50

+0

太棒了,你只是讓我的一天!謝謝 – kbaccouche 2013-04-09 16:43:18