我有一個類叫做Structure
:有沒有一種方法,使用LINQ/EF獲取父/子層次結構中最頂級的項目?
public class Structure
{
public int StructureId { get; set; }
public Structure Parent { get; set; }
}
正如你所看到的,Structure
有父Structure
。這個層次結構中可以有無限數量的結構。
有沒有什麼辦法,使用LINQ(與實體框架),在這個層次結構中獲得最頂級的結構?
目前,我不得不擊中數據庫幾次,以找到最上面的父母。最頂端的母公司是一個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/Lambda表達式?理想的情況下,開始用下面的代碼:
var structureQuery = from item in context.Structures
where item.StructureId == structureId
select item;
我只是希望能夠寫出像下面這樣我只火了一個數據庫命中:
structureQuery = Magic(structureQuery);
Structure topMostParent = structureQuery.Single();
我不認爲這是可能的,但我很好奇其他人可能想出的解決方案...... – jeroenh 2010-10-06 15:22:39
哪個數據庫,MSSQL? – 2010-10-06 15:22:59
@Nick - MS SQL 2005. @jeroenh - 是的,我也不這麼認爲。我編寫了當前完成這項工作的存儲過程,並且它自己碰到了數據庫幾次。 – GenericTypeTea 2010-10-06 15:24:09