如何使用LINQ获取分层组织数据?

时间:2013-03-18 13:02:01

标签: linq entity-framework linq-to-sql

我有一些链接到OrgUser表的组织表。

OrgUser> - 组织 - < OrgLink                 - <

OrgLink有2个1toMany链接,其中一个是ParentOrg,另一个是ChildOrg。

一个典型的例子是Joe Bloggs,他在“小企业部门”工作,这是“商务部”的一部分。

OrgLink中有一条记录,将“业务部门”指向其“小企业单位”的子组织,其中有一个名为“Joe BLoggs”的OrgUser。

如果我以“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}

非常感谢提前。

EDIT / UPDATE:

研究过这个后,我发现我不需要JOIN或INCLUDE,因为我的EF模型具有所需的关联,因此显示为导航属性。我最终使用了带有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的了解变得更好时,我会自己找到它!

0 个答案:

没有答案