私はLINQPadをいじっていて、この質問が出されたと確信していますが、私はかなり長い間苦労して探していました。
私はこのようなコレクションを持っています:
Age Material
--- --------
3 Steel
3 Steel
3 PVC
4 Steel
4 PVC
最初にマテリアルでグループ化し、次に各マテリアルグループ内の各年齢の発生をカウントして、次のようにします。
{Mat = Steel,
[(Age = 3, Count = 2),
(Age = 4, Count = 1)]}
{Mat = PVC,
[(Age = 3, Count = 1),
(Age = 4, Count = 1)]}
これはネストされたグループに関係していることは知っていますが、正しく理解できません。私はこのようなものを試してきました(疑問符なしでのみ)が、各グループのアイテムに到達する方法がわかりません:
var matGroups = from line in Pipelines
group line by line.Material into matGroup
from ???? in ???
group ???? by ???.Age;
関連する場合、私がクエリしているデータストアはSQLiteにあります。
アップデート
次のコードは、必要なデータを取得します。ただし、可能であれば、単一のクエリでこれを行う適切な方法を知りたいと思います。
var materials = from p in Pipelines
group p by p.Material into matGroup
select matGroup.Key;
foreach (string material in materials)
{
var ages = from p in Pipelines
where p.Material == material
group p by p.Age into ageGroup
select new {Age = ageGroup.Key, Count = ageGroup.Count()};
ages.Dump(material + " Pipelines");
}