0

私は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");
}
4

1 に答える 1

1

とによるグループ化AgeですMaterial

from p in Pipelines
group p by new { p.Material, p.Age } into g
orderby g.Key.Material, g.Key.Age
select new { g.Key.Material, g.Key.Age, Count = g.Count () }
于 2012-05-09T19:00:27.497 に答える