Candidate が複数の CandidateLocation エントリを持つことができる Candidate と CandidateLocation の 2 つのエンティティがあります。
CandidateLocation には、CandidateId、ISO 国コード (US、GB など)、およびタイプ列 (1 = 許可、2 = 制限) が含まれます。
規則では、Candidate が CandidateLocation テーブルに「許可された」エントリを持っていない場合、どこでも動作できることが規定されています。明示的に「許可された」場所がある場合、明示的に許可された場所でのみ働くことができます。明示的に制限された場所では機能しません。
これをデモンストレーションするには、下の画像を参照してください (候補者は複数の場所を持つことができます。図を簡略化するために 1 つにしています)
SQL でこれを実現する 1 つの方法は、次のクエリです。
SELECT *
FROM Candidate
WHERE Candidate.IsArchived = 0
AND
-- Do not inlude restricted locations (RestrictionStatus = 2)
Candidate.CandidateId NOT IN (SELECT CandidateId FROM CandidateLocation WHERE IsArchived = 0 AND CountryISOCode = @Location AND RestrictionStatus = 2)
AND
(
-- Include Explicit Permitted Locations
Candidate.CandidateId IN (SELECT CandidateId FROM CandidateLocation WHERE IsArchived = 0 AND CountryISOCode = @Location AND RestrictionStatus = 1)
OR
-- Include Candidates with no Explicit Permitted Locations
Candidate.CandidateId NOT IN (SELECT CandidateId FROM CandidateLocation WHERE IsArchived = 0 AND RestrictionStatus = 1)
)
linq & Navigation Properties を使用してこれを達成する方法を誰かが知っていれば、助けていただければ幸いです。
どうもありがとう