2013-04-11 3 views
0

У меня есть эта таблицаполучить сумму группы MAXS по

EquipmentId Value Date 
1   2  11/04/2013 
1   1  11/04/2013 
2   3  11/04/2013 
2   2  10/04/2013 
2   5  10/04/2013 
3   1  10/04/2013 
3   3  11/04/2013 

Я хочу, чтобы сгруппировать эти элементы по дате, и есть словарь с датой в качестве ключа и суммы Maxs из всех оборудование значения в тот день

результат был бы, как это

[10/04/2013: 6] // 6 = 5 (as the max of values of the the equipmetId 2) + 1 (as the max of values of the the equipmetId 3) 
[11/04/2013: 5] // 5 = 2(as the max of values of the the equipmetId 1) + 3(as the max of values of the the equipmetId 3) 

мне удалось сделать запрос, чтобы получить это без суммы, то есть только один оборудования.

var consumptionValues = (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 
         join e in context.EquipmentSet on ep.EquipmentID equals e.EquipmentID 
         where (e.EquipmentID == equipmentId && pi.ProprietesName == ProprietesName.Energy && c.Date <= DateTime.Now && c.Date >= firstDayDate) 
         group c by SqlFunctions.DatePart("weekday", c.Date) into grp 
         select new 
         { 
          dayOfWeek = (DayOfWeek)grp.Key.Value - 1, 
          value = grp.Max(c => c.Value), 
         }).ToDictionary(c => c.dayOfWeek.ToString(), c => c.value); 

Это полный запрос со всеми объединениями, в примере я просто дал упрощенный пример.

Возможно ли это сделать в одном запросе?

+0

ли это LINQ к Entities или LINQ к SQL? – MarcinJuraszek

ответ

0

Я должен сказать, что я не уверен, что это будет работать, но вы должны дать ему шанс:

var consumptionValues = (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 
         join e in context.EquipmentSet on ep.EquipmentID equals e.EquipmentID 
         where (e.EquipmentID == equipmentId && pi.ProprietesName == ProprietesName.Energy && c.Date <= DateTime.Now && c.Date >= firstDayDate) 
         group new { c, e } by SqlFunctions.DatePart("weekday", c.Date) into grp 
         select new 
         { 
          dayOfWeek = (DayOfWeek)grp.Key.Value - 1, 
          value = grp.GroupBy(i => i.e.EquipmentID).Sum(g => g.Max(i => i.c.Value)), 
         }).ToDictionary(c => c.dayOfWeek.ToString(), c => c.value); 
+0

OMG, ты только что сделал свой день. Я действительно не получил ваш код, но он работает! большое спасибо – kbaccouche

Смежные вопросы