GroupBy在嵌套子集合中具有属性

时间:2016-09-13 19:27:09

标签: c# linq lambda group-by

我有一个查询,其中包含一系列活动。 - 每个活动可以在多个国家/地区完成,因此活动具有ActivityCountries的子集合。 -Each ActivityCountry与Country表关联,以便我获取Country Name。 -Each Activity有一个名为BudgetTotal的字段。

我需要一个在ActivityCountries子集合中的CountryCode上分组的集合,并按分组的国家/地区返回Sum(BudgetTotal)和CountryName。 我从我的活动列表开始(由于页面上的过滤器,这个列表可能会更改,这就是我想重新使用此集合的原因)。

var activities = GetFilteredActivities();

然后我尝试通过获取所有Activities和ActivityCountries的列表来简化它

var countries = activities.SelectMany(a => a.ActivityCountries);

然后我尝试按CountryCode对它们进行分组并返回CountryName和Sum(BudgetTotal)。这是我遇到问题的地方。 我试过了:

var b = countries.GroupBy(g => g.CountryCode)
                                .Select new
                                {
                                    CountryName = <something>.Country.CountryName,
                                    Total = Sum(<something>.BudgetTotal)
                                }

我意识到这不起作用,但我想弄清楚如何从这里获取国家名称和总和(BudgetTotal)。我还必须在Sum(BudgetTotal)上使用OrderByDescending。我见过很多例子,但没有一个能满足我的需要。

1 个答案:

答案 0 :(得分:1)

你很亲密......

var b = countries
    .GroupBy(c => c.CountryCode)
    .Select(g => new
        {
            CountryName = g.First().Country.CountryName,  // assuming that there is 1 country code per country name
            Total = g.Sum(x => x.BudgetTotal)
        })
    .OrderByDescending(c => c.Total);