これは私の実際の例です。私は4つのテーブルを持っています:
- 人
- プラン
- カバレッジ
- 対象メンバー
一人一人が多くのプランを持つことができ、それらのプランのそれぞれが多くの補償範囲を持つことができます。これらの各カバレッジには、多数の CoveredMembers を含めることができます。
Plan.PlanType == 1
とにフィルターを適用するクエリが必要CoveredMembers.TermDate == null
です。このクエリは、終了していない医療タイプのプランを持っている人を呼び戻す必要があります。
この SQL ステートメントはまさにそれを行います。
SELECT Person.*, Plans.*, Coverages.*, CoveredMembers.*
FROM Person P
INNER JOIN Plan PL ON P.PersonID = PL.PersonID
INNER JOIN Coverage C on PL.PlanID = C.PlanID
INNER JOIN CoveredMember CM on C.CoverageID = CM.CoverageID
WHERE CM.TermDate = NULL AND PL.PlanType = 1
匿名型を使用してこれを行う方法を理解しましたが、データを更新してデータベースに保存し直す必要がある場合があります。匿名型は読み取り専用です。
JOIN を使用して機能するソリューションが提供されましたが、それは人を戻すだけでした (ただし、必要な方法でフィルター処理されました)。次に、各人をループできます。
foreach (var person in persons) {
foreach (var plan in person.Plans{
//do stuff
}
}
しかし、それはループの繰り返しごとに db 呼び出しを行いませんか? 私はそれぞれ 3 つの未終了の医療計画を持つ 500 人を抱えているので、データベースを 1500 回呼び出すことになりますか?
これが、Persons から CoveredMembers までのデータ ツリー全体を一度に戻したい理由です。これは不可能ですか?