2016-09-13 10 views
0

私はアクティビティのコレクションで構成されるクエリを持っています。 - 複数の国で各アクティビティを実行できるため、アクティビティにはActivityCountriesの子コレクションがあります。 - 各CountryCountryは、国名を取得するためにCountryテーブルに関連付けられています。 - 各アクティビティにはBudgetTotalというフィールドがあります。入れ子の子コレクションのプロパティを持つGroupBy

ActivityCountries子コレクションのCountryCodeをグループ化し、グループ化された国別にSum(BudgetTotal)とCountryNameを返すコレクションが必要です。 私の活動リストから始めます(このリストは、このコレクションを再利用したい理由であるページ上のフィルターのために変更できます)。

var activities = GetFilteredActivities(); 

私は、その後、私は国番号によってグループにそれらを試してみて、COUNTRYNAME和(BudgetTotal)を返し、すべての活動とActivityCountries

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

のリストを取得することにより、それを単純化してみてください。これは私が問題を抱えているところです。 私が試してみた:

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

を、私はこれが動作しないことを認識したが、私はここから国の名前と合計(BudgetTotal)を取得する方法を把握しようとしています。また、私はOrderByDescendingにSum(BudgetTotal)を設定する必要があります。私は多くの例を見てきましたが、私が必要とするものには合っていません。あなたが近くにいる

答えて

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

関連する問題