4

我有这个代码:

    var tradeReqsBySegment = segGroups.Join(pPeriods, s => s.MarketSegmentId, p => p.EntityId, (s, p) => new
    {
        SegmentCode = s.SegmentCode, // string
        Time = p.StartLocal, // datetime
        TradeRequirement = p.Volume // double
    })
    .GroupBy(s => s.SegmentCode)
    .ToDictionary(g => g.Key, g => g.ToDictionary(i => i.Time, i=>i.TradeRequirement));

我希望g.ToDictionary(i => i.Time, i=>i.TradeRequirement))按时间分组,并TradeRequirement总结或平均。我该如何处理?

此外,是否可以按月对时间进行分组,例如 get :

Time - TradeReq
01/2013 - 500
02/2013 - 234
...
4

2 回答 2

1

您可以同时获得:Sum并且Average同时使用匿名类型:

var tradeReqsBySegment = segGroups.Join(pPeriods, s => s.MarketSegmentId, p => p.EntityId, (s, p) => new
{
    SegmentCode = s.SegmentCode, // string
    Time = p.StartLocal, // datetime
    TradeRequirement = p.Volume // double
})
.GroupBy(s => s.SegmentCode)
.ToDictionary(g => g.Key,
              g => g.GroupBy(gr => new DateTime(gr.Time.Year, gr.Time.Month, 1))
                    .ToDictionary(gr => gr.Key.ToString("MM/yyyy"),
                                  gr => new {
                                      Sum = gr.Sum(s => s.TradeRequirement),
                                      Avg = gr.Average(s => s.TradeRequirement)
                                  }));
于 2013-04-05T16:18:42.533 回答
1
g.GroupBy(gr => new DateTime(gr.Time.Year, gr.Time.Month, 1))
         .ToDictionary(i => i.Key, i => i.Sum(s => s.TradeRequirement));
于 2013-04-05T16:08:20.073 回答