ここにはこの例がありますが、正確な用語がわからないので、私はそれを見つけることができません。だから、優しくしてください。LINQでネストされた結合をエンティティに書き込む
問題は簡単なものでなければなりません:
私はやや悪い(すなわち欠落している外部キーなど)を設計し、AzureのSQLデータベースを持っています。この時点でデータベースを再設計することはできないので、クエリを使用して手動でリレーションを処理する必要があります。データベースは私たちのソフトウェアのボトルネックでもあるので、できるだけデータベースのヒット率を低くしてクエリを実行しなければなりません。 A、B、CおよびD(未登録の外部キーに接続された)Aは、いくつかのエンティティBを有するエンティティ、エンティティBは、いくつかのエンティティC及びCは、いくつかのエンティティを有するエンティティD.
を有する私はエンティティを持っています
私はエンティティAのIDを持っており、可能な限り最適な状態で、接続されたすべてのエンティティのツリーをDsまで返すことを望みます。
オフ開始:
from A in dbA.Where(e=>e.Id==IDParameter)
join B in dbB on A.Id equals B.AId into Bs
私はobvoius道を行けば今、私はD.のためのCsと、再びCのためにB表示中全てのBでこれを行うとする必要があるだろう、と最初のDSとのCsに参加し、 BsとCs、そして最後にAsとBsは、すべてのDsをCsに結びつけることを意味します。そして、すべて、あなたはポイントを得て、ついにIDParameterフィルターに到達します。それは単に効果がないようです。
単一のクエリでこれを行う適切なC#の方法はありますか?
まあ当たり前では、...それは右の私の鼻の下で全体の時間を予測しましたありがとうございました:) – JasonX
追加の質問 - 私は実際に少なくとも1つのCを持っているBsを選択するだけでどうなるでしょうか? – JasonX
残念ながら、グループ結合は基本的には外部結合です。しかし、結合の後で投影の前に 'Cs.Any()'を挿入することができます。 –