2016-09-13 129 views
0

我有一个查询,其中包含一组活动。 - 每个活动都可以在多个国家完成,因此该活动具有ActivityCountries的子集合。 - 每个ActivityCountry都与国家/地区表关联,以便获取国家/地区名称。 - 每个活动都有一个名为BudgetTotal的字段。GroupBy嵌套子集合中的属性

我需要在ActivityCountries子集合中的CountryCode上进行分组的集合,并通过分组国家向我返回Sum(BudgetTotal)和CountryName。 我从我的活动列表开始(因为页面上的过滤器,此列表可能会发生变化,这就是为什么我想要重新使用此收藏夹的原因)。

var activities = GetFilteredActivities(); 

然后我尝试让所有活动的列表,并ActivityCountries

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

简化它,然后我试着将它们分组由COUNTRYCODE并返回国家或地区名称和总和(BudgetTotal)。这是我遇到问题的地方。 我已经试过:

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

我知道这不工作,但我试图找出如何让国名,并从这里的总和(BudgetTotal)。我还必须对Sum(BudgetTotal)的OrderByDescending。我见过很多例子,但没有一个适合我需要的例子。

回答

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

感谢杰夫。这就是诀窍! – devguy