Linq 通过以下方式获取maxs组的总和:

Linq 通过以下方式获取maxs组的总和:,linq,sum,Linq,Sum,我有这张桌子 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

我有这张桌子

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
我想按日期对这些项目进行分组,并有一个字典,其中日期作为键,以及当天所有设备值的最大值之和

结果是这样的

[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);
var consumptionValues=(来自context.ConsumptionSet中的c
在c.PropertiesInstanceID上的context.PropertiesInstanceSet中连接pi等于pi.PropertiesInstanceID
在context.EquipmentPropertiesSet上连接ep。EquipmentPropertiesID等于ep.EquipmentPropertiesID
在context.EquipmentSet上连接e。EquipmentID等于e.EquipmentID
其中(e.EquipmentID==EquipmentID&&pi.ProprietesName==ProprietesName.Energy&&c.Date=firstDayDate)
按SqlFunctions.DatePart(“weekday”,c.Date)将c分组到grp中
选择新的
{
dayOfWeek=(dayOfWeek)grp.Key.Value-1,
值=grp.Max(c=>c.value),
}).ToDictionary(c=>c.dayOfWeek.ToString(),c=>c.value);
这是一个包含所有连接的完整查询,在这个示例中,我刚刚给出了一个简化的示例


是否可以在一个查询中完成此操作?

我不得不说,我不确定它是否有效,但您应该试一试:

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);
var consumptionValues=(来自context.ConsumptionSet中的c
在c.PropertiesInstanceID上的context.PropertiesInstanceSet中连接pi等于pi.PropertiesInstanceID
在context.EquipmentPropertiesSet上连接ep。EquipmentPropertiesID等于ep.EquipmentPropertiesID
在context.EquipmentSet上连接e。EquipmentID等于e.EquipmentID
其中(e.EquipmentID==EquipmentID&&pi.ProprietesName==ProprietesName.Energy&&c.Date=firstDayDate)
通过SqlFunctions.DatePart(“weekday”,c.Date)将新的{c,e}分组到grp中
选择新的
{
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);

是LINQ to Entities还是LINQ to SQL?天哪,你让我高兴极了。我没有真正理解你的代码,但它是有效的!谢谢