ひどいタイトルで申し訳ありません。使用する正しい用語がわかりません。
私は単純なテーブル(マテリアルと呼ばれる)を持っています:
Id int
Desc Varchar(50)
MainType Varchar(20)
SubType Varchar(20)
いくつかのサンプルデータ:
ID Desc Maintype SubType
1 Aluminium 3003 Metal Aluminium
2 Bamboo Wood Softwood
3 Cellulose Acetate Polymer CA
4 Cork Wood Composite
5 Stainless Steel Metal Steel
6 Tinplate Metal Steel
7 PA (Type 11, Unfilled) Polymer PA
8 PA (Type 12, Unfilled) Polymer PA
9 PA (Type 46, Extrusion) Polymer PA
10 Palm Wood Softwood
次のように、データセット内の各マテリアルのメインタイプとサブタイプの出現回数を含む (グループ化されていない) マテリアルの順序付けられた (メインタイプ、サブタイプによる) リストが必要です。
ID Desc Maintype SubType CountMain CountSub
1 Aluminium 3003 Metal Aluminium 3 1
5 Stainless Steel Metal Steel 3 2
6 Tinplate Metal Steel 3 2
3 Cellulose Acetate Polymer CA 4 1
7 PA (Type 11, Unfilled) Polymer PA 4 3
8 PA (Type 12, Unfilled) Polymer PA 4 3
9 PA (Type 46, Extrusion) Polymer PA 4 3
4 Cork Wood Composite 3 1
2 Bamboo Wood Softwood 3 2
10 Palm Wood Softwood 3 2
SQLでは、これは面倒です:
SELECT Id
,MaterialName
,MaterialType
,MaterialSubType
,(select count(id) from materials m2 where m2.materialType=m1.materialType) as CountMain
,(select count(id) from materials m2 where m2.materialSubType=m1.materialSubType) as CountSub
FROM materials m1
order by materialType, MaterialSubType
ただし、Linq では、それに近づくことはできません。これは、私が vb を使用していて、group と into に構文上の問題があるためかもしれません。「グループ」、「イント」、「カウント」によって引き起こされる厄介な文脈上の問題を解決できないため、linq 式をきれいにコンパイルすることさえできません。「カウント」結果に使用するサブクエリの正しい技術用語がわからないため、これを行う例が見つかりません。やり方が悪いからかも!
linqクエリを理解している人にとっては非常に簡単だと確信しています-オンラインチュートリアルまたはこれを達成する方法を示す何かがあれば、ポインタまたはLINQでこれを行う方法の簡単な説明をいただければ幸いです.