2013-04-09 71 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