如果你做左外連接類似的(即不使用爲和DefaultIfEmpty()),那麼頂級父節點將不會被輸出(因爲它的父母是NULL)
我的SQL版本去:
SELECT
B.ELEMENT_CODE ParentElement,
A.ELEMENT_CODE ChildElement
FROM NESTED_SET_STRUCTURE AS A
LEFT OUTER JOIN NESTED_SET_STRUCTURE AS B
ON B.PROCEDURE = 'TEST1' AND B.FROM_LEFT = (SELECT MAX(C.FROM_LEFT)
FROM NESTED_SET_STRUCTURE AS C
WHERE C.PROCEDURE = 'TEST1' AND A.FROM_LEFT > C.FROM_LEFT
AND A.FROM_LEFT < C.TO_RIGHT)
WHERE
A.PROCEDURE = 'TEST1';
翻譯爲:
var nestedSets1 =
from a in NESTED_SET_STRUCTUREs
join b in NESTED_SET_STRUCTUREs on
new { a.PROCEDURE, FROM_LEFT = ((from c in NESTED_SET_STRUCTUREs
where c.PROCEDURE.Equals("TEST1")
&& a.FROM_LEFT > c.FROM_LEFT
&& a.FROM_LEFT < c.TO_RIGHT
select (c.FROM_LEFT)).Max()) } equals
new { b.PROCEDURE, b.FROM_LEFT } into bo
from bb in bo.DefaultIfEmpty()
where
a.PROCEDURE.Equals("TEST1")
orderby a.FROM_LEFT
select new {
ParentElement = bb.ELEMENT_CODE,
ChildElement = a.ELEMENT_CODE
};
希望幫助,保羅。
謝謝,我會做一些測試。一目瞭然,看起來不錯。不知道爲什麼我不認爲只有2個發言。 :D – Chaddeus 2010-03-23 12:22:09
@Thomas - 這很有用,謝謝! – Chaddeus 2010-03-23 22:48:31