【发布时间】:2010-10-06 15:16:56
【问题描述】:
我有一个班级叫Structure:
public class Structure
{
public int StructureId { get; set; }
public Structure Parent { get; set; }
}
如您所见,Structure 有一个父 Structure。在这个层次结构中可以有不定数量的结构。
有什么方法可以使用 LINQ(使用实体框架)来获得此层次结构中的 top-most 结构?
目前,我必须多次访问数据库才能找到最顶层的父级。最顶层的父级是 Structure,Parent 属性为空:
Structure structure = structureRepository.Get(id);
while (structure.Parent != null)
{
structure = structureRepository.Get(structure.Parent.StructureId);
}
// When we're here; `structure` is now the top most parent.
那么,有没有什么优雅的方法可以使用 LINQ/Lambdas 做到这一点?理想情况下,从以下代码开始:
var structureQuery = from item in context.Structures
where item.StructureId == structureId
select item;
我只是希望能够编写如下内容,以便我只触发一次数据库命中:
structureQuery = Magic(structureQuery);
Structure topMostParent = structureQuery.Single();
【问题讨论】:
-
我不认为这是可能的,但我很好奇其他人可能提出的解决方案......
-
@Nick - MS SQL 2005。@jeroenh - 是的,我也不这么认为。我编写了当前完成这项工作的存储过程,它本身多次访问数据库。
标签: linq c#-4.0 entity-framework-4 lambda