ここSOや他の場所にLINQネストクエリの数え切れないほどの例があることは知っていますが、それは私には意味がありません。私が5歳のように誰かがこれを説明できれば、私はとても感謝しています。これはすべて疑似難読化されているため、この不自然な例に我慢してください。
私はこれらを持っているEFモデルを持っています:
public class Car(){
public String Vin {get; private set;}
public string Type {get; private set;}
public List<Option> Options {get; set;}
}
public class Option(){
public string Name { get; set; }
}
IQueryable<Car> cars
リポジトリからコレクションを取得します。
十分に単純です。目標は次のとおりです。
- すべての車種を一覧表示します(「トラック」、「SUV」、「ミニバン」など)
- これらの各タイプの下に、そのタイプの車に存在するオプション名のサブリストがあります。
- 各オプションの下に、そのオプションがあり、そのタイプの各車のVINをリストします。
したがって、リストは次のようになります。
- トラック
- トレーラーヒッチ
- vin1
- vin8
- トラックナッツ
- vin2
- vin3
- vin4
- ガンラック
- vin1
- 折りたたみ式リアシート
- vin2
- vin3
- トレーラーヒッチ
- ミニバン
- 回転シート
- vin6
- DVDプレーヤー
- vin6
- vin10
- 折りたたみ式リアシート
- vin6
- vin10
- 回転シート
- SUV
- 折りたたみ式リアシート
- vin9
- vin5
- 折りたたみ式リアシート
あなたはおそらくその考えを理解するでしょう。次のように、車をタイプ別にグループ化できることを知っています。
from c in cars
group by c.Type into g
しかし、私がする必要があるのは、グループVin
化しOption
て、結果をタイプにグループ化することだと思います。私もする必要があるかもしれないと思います
cars.SelectMany(c => c.Options)
.Select(o => o.Name)
.Distinct();
一意のオプション名のリストを取得しますが、a)これがこれを行う最も効率的な方法であり、b)これをグループ化クエリに組み込む方法がわかりません。これを実現するためにネストされたグループ化クエリを作成する方法がよくわかりません。最初のグループは外部グループですか、それとも内部グループですか。
これについての私の理解は改善の余地がないので、もう一度お願いします。私が5歳のように説明してください。
ありがとうございます。