2013-04-11 7 views
0

J'ai ce tableauobtenir la somme du groupe maxs par

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 

Je veux regrouper ces éléments par date, et un dictionnaire avec la date comme une clé et la somme des maxs du tout les valeurs des équipements en ce jour-là

le résultat serait comme ça

[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) 

J'ai réussi à faire la requête pour obtenir cela sans la somme, ce qui signifie que pour un seul équipement.

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); 

C'est la requête complète avec toutes les jointures, dans l'exemple je viens de donner un exemple simplifié.

Est-il possible de le faire en une seule requête?

+0

Est-il à des entités ou LINQ LINQ to SQL? – MarcinJuraszek

Répondre

0

Je dois dire que je ne suis pas sûr que cela fonctionnera, mais vous devriez donner un coup de feu:

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 vous venez de faire ma journée. Je n'ai pas vraiment eu votre code mais ça marche! Merci beaucoup – kbaccouche