2012-05-09 11 views
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にあります。

UPDATE

次のコードは、私が欲しいデータを取得します。しかし、可能ならば、単一のクエリでこれを行う適切な方法を知りたいと思います。

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"); 
} 
+0

が、あなたがしたいSQLコマンドは単純です: 'パイプラインからの選択材料、年齢、COUNT(*)材料、年齢別にグループ化して、「多分それが助けになるだろう... – Sam

答えて

1

それはAgeMaterialでわずかグループです:私は、LINQを使用したことがない

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() } 
+0

わかりやすい!ありがとう。 –

関連する問題