OrgUser テーブルにリンクされている組織テーブルがいくつかあります。
OrgUser >- Org -< OrgLink -<
OrgLink には 2 つの 1toMany リンクがあり、1 つは ParentOrg で、もう 1 つは ChildOrg です。
典型的な例は、「ビジネス部門」の一部である「スモール ビジネス ユニット」で働くジョー ブロッグスです。
OrgLink には、"Joe BLoggs" という名前の OrgUser を持つ "Small Business Unit" の子組織に "Business Department" を指すレコードがあります。
私が「Joe Bloggs」としてログインしている場合、彼がリンクされている直接および親組織のすべてのリストを取得したいので、この場合は「小規模事業部」と「事業部」を取得したいと考えています。 . すぐに組織を取得できますが、親のビットが混乱しています。また、親組織がない場合は、直接の組織のみを返す必要があります。基本的に、直接の組織にリンクされているすべての組織が返されます。
これまでの私のLINQ:
from SOU in StdOrgUser
join SO in StdOrg on SOU.StdOrgId equals SO.Id
where SOU.UserId.Equals(new Guid("42995B01-97C8-4148-8EA3-5CCC55535194"))
select new { OrgName=SO.Name, Col2= SOU.UserId, c3=SO.StdOrgType.Name}
よろしくお願いします。
編集/更新:
これを調査したところ、EF モデルには必要な関連付けがあり、ナビゲーション プロパティとして表示されるため、JOIN または INCLUDE は必要ないことがわかりました。最終的に 2 つの LINQ クエリで UNION を使用したため、疑似コードは次のようになります。
var results1 = Get child organisation that UserId works for.
var results2 = Get parent organisation for child organisation if it exists.
var results3 = results1.Union(results2)
foreach org in results3
{
console.writeline(org.Id);
console.writeline(org.Name);
}
もっと雄弁なアプローチがあると確信しており、お気軽に提案してください。しかし、このアプローチは機能します。おそらく、私の LINQ の知識が深まれば、自分で見つけることができるでしょう!