2016-09-13 89 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