使用LINQ向实体导航树

时间:2009-02-18 15:48:53

标签: c# linq entity-framework

我有一个名为Area的表,它以分层方式存储区域。表中有Id和ParentId列。 ParentId与表的Id列的外键链接。

当我生成EDM时,我得到两个导航属性,Area1和Area2。 我怎么能回到我的区域的树结构,并使用LINQ to entities在树中导航?

我可能完全在问错误的问题,请耐心等待。 :)

2 个答案:

答案 0 :(得分:1)

这是正确的问题。当您基于数据库模式生成时,LINQ会自动命名子项和父项。

我会检查designer.cs的模型,但很可能Area1是孩子,而Area2是Parent。或反之亦然。

如果您想获得当前Area实例的所有子项:

foreach (Area childArea in currentArea.Area1) {
    // do something
}

如果你想要父母:

Area parentArea = currentArea.Area2;

我不知道你是否可以重命名孩子和父母,这应该是可能的。只是没有深入研究。

答案 1 :(得分:1)

我认为简单地重命名属性将消除您的大部分困惑。其中一个属性是当前实例的子项;另一个是当前实例的父级。查看映射详细信息以确定哪个是哪个。然后更改属性的名称以对应其功能。现在查询应该更容易编写。