Element
たとえば、 type の一般的なリストがあります。
public class Element
{
public string Country { get; set; }
public string City { get; set; }
public int Population { get; set; }
}
以下のデータで。
var elements = new List<Element>
{
new Element { Country = "Country A", City = "Barrie", Population = 12 },
new Element { Country = "Country A", City = "Barrie2", Population = 12 },
new Element { Country = "Country A", City = "Barrie2", Population = 12 },
new Element { Country = "Country A", City = "Barrie", Population = 12 },
new Element { Country = "Country D", City = "Essex", Population = 12 },
new Element { Country = "Country A", City = "Barrie", Population = 12 },
new Element { Country = "Country A", City = "Barrie", Population = 12 },
new Element { Country = "Country D", City = "Essex", Population = 12 },
new Element { Country = "Country A", City = "Barrie", Population = 12 },
new Element { Country = "Country A", City = "Barrie", Population = 12 }
};
基本的に、国と都市ごとにグループ化された人口の累計が必要です。
何かのようなもの。
Country A | Barrie | `running total for Barrie`
Country A | Barrie2 | `running total for Barrie2`
| | `total for Country A`
Country D | Essex | `running total for Essex`
| | `total for Country D`
| | `total for everything`
どこにも拡張機能が見つからなかったので (ロールアップを数回使用する予定なので拡張機能と言いました)、試してみることにしました。そこで、この単純なクエリから始めました。
var groupedElements = elements
.GroupBy(x => new { x.Country, x.City })
.Select(x => new { Country = x.Key, City = x.Select(xx => xx.City), Population = x.Sum(xx => xx.Population) })
.ToList();
このクエリは期待どおりに機能するので、正しい軌道に乗っていると思います。groupedElements
次に、どのプロパティが集計されているかを把握する必要があると思います。これは、ロールアップを行う対象だからです。どうすればそれを達成できますか? または、集計関数を実行する列を指定するパラメーターを使用することもできます。