C# Linq2Sql中的自引用表

C# Linq2Sql中的自引用表,c#,linq-to-sql,C#,Linq To Sql,我在Linq2Sql中看到了很多关于自引用表的问题,以及如何急切地加载特定根对象的所有子记录。我通过访问所有底层属性实现了一个临时解决方案,但您可以看到,这对性能没有任何好处 但问题是,所有记录都使用关联GUID相互关联。示例如下: RootElement - Id: 1 - ParentId: null - CorrelationId: 4D68E512-4B55-44f4-BA5A-174B630A03DD ChildElement1 - Id: 2 - ParentId: 1 - Cor

我在Linq2Sql中看到了很多关于自引用表的问题,以及如何急切地加载特定根对象的所有子记录。我通过访问所有底层属性实现了一个临时解决方案,但您可以看到,这对性能没有任何好处

但问题是,所有记录都使用关联GUID相互关联。示例如下:

RootElement
- Id: 1
- ParentId: null
- CorrelationId: 4D68E512-4B55-44f4-BA5A-174B630A03DD

ChildElement1
- Id: 2
- ParentId: 1
- CorrelationId: 4D68E512-4B55-44f4-BA5A-174B630A03DD

ChildElement2
- Id: 3
- ParentId: 2
- CorrelationId: 4D68E512-4B55-44f4-BA5A-174B630A03DD

ChildElement1
- Id: 4
- ParentId: 2
- CorrelationId: 4D68E512-4B55-44f4-BA5A-174B630A03DD
在我的情况下,我确实可以访问correlationId,因此我可以通过执行以下查询来检索我的所有记录:

from element in db.Elements
where element.CorrelationId == '4D68E512-4B55-44f4-BA5A-174B630A03DD'
select element;
但是,当然,我希望通过执行此查询将这些元素彼此关联:

from element in db.Elements
where element.CorrelationId == '4D68E512-4B55-44f4-BA5A-174B630A03DD' && element.ParentId == null
select element;
我的问题是:是否可以将第一个查询的结果作为某种“缓存机制”组合到我获取根元素的查询中

谢谢你的意见


J.

我不太清楚您想做什么,或者您所说的“缓存机制”是什么意思。第二个查询如何创建任何类型的关联

我的第一个直觉是,您希望按父对象对结果进行分组,在这种情况下,您只需对第一个查询的结果调用GroupByx=>x.ParentId

我的第二个预感是,您的第二个查询只获取根元素,在这种情况下,您只需对第一个查询的结果调用Wherex=>x.ParentId==null

如果这不是你想要的,请进一步澄清

编辑: 针对您的第一条评论,以下是如何执行这两个查询:

var correlated_elements = db.Elements.Where(element => element.CollelationId == '4D68E512-4B55-44f4-BA5A-174B630A03DD');
var root_elements = correlated_elements.Where(element => element.ParentId == null);
这只需要对数据库进行一次查询。尽管如此,第二个查询并没有创建层次结构——它只是返回没有ParentId的元素。如果您可以描述所需的层次结构,我们可以通过查询来实现它


如果不确定对数据库实际执行的查询是什么,可以将SQL输出到控制台或使用的试用版。

通过“缓存机制”,我的意思是我希望在第二个查询中使用第一个查询的结果。在第一个查询中,我得到一个具有相同CorrelationId的所有项的非层次列表。如果我可以使用这些数据来填充查询2的层次结构,而不必每次访问子属性时Linq都懒散地获取数据,那就太好了。有什么想法吗?好的,谢谢你,杰。我确实测试了您描述的场景,虽然它只生成了一个查询,但正如您所说,我仍然没有得到我的结构中的层次结构。我想这是合乎逻辑的。问题是我不知道我的等级制度会有多深。这就是为什么我希望Linq在默认情况下急切地加载所有子元素,而不必自己传递它们。我觉得这在技术上是不可能的。你知道这种自引用递归性在实体框架3.5-4.0中是否有效吗?