¿Selección recursiva a través de LINQ? [duplicar

Posible duplicado:
linq a sql consulta recursiva

e atasqué con tener que crear una selección recursiva a través de LINQ para la tabla de autorreferencia.

Yo uso esta clase:

public class DivisionHierarchy
{
    public Division Division { get; set; }
    public IEnumerable<DivisionHierarchy> Divisions { get; set; }
}

y creé esta función pero de alguna manera es infinita.

public IEnumerable<DivisionHierarchy> GetDivisionHierarchy(IEnumerable<Division> allDivisions, Division parentDivision)
{
    Guid? parentDivisionId = null;

    if (parentDivision != null)
         parentDivisionId = parentDivision.DivisionID;

    var childDivisions = allDivisions.Where(e => e.DivisionID == parentDivisionId);

    Collection<DivisionHierarchy> hierarchy = new Collection<DivisionHierarchy>();

    foreach (var div in childDivisions)
       hierarchy.Add(new DivisionHierarchy() { Division = div, Divisions = GetDivisionHierarchy(allDivisions, div) });

     return hierarchy;
}

¿Alguna idea de por dónde puedo comenzar?

¡Gracias

PD. ¿Hay alguna otra forma de hacerlo?

UPDATES basados enhttp: //www.scip.be/index.php? Page = ArticlesNET18 # AsHierarchy

Encontré mis errores.

Hay 2 cosas para implementar: 1. El nodo raíz debe crearse en la base de datos.

He cambiado un poco el código.

Guid divisionID = Guid.Parse("5b487b3d-e9be-413f-b611-2fd7491e0d0d"); // Hardcoded somehow
var rootDivision = db.Divisions.Where(i => i.ID == divisionID).FirstOrDefault();
var divisionHierarchy = GetDivisionHierarchy(db.Divisions.AsEnumerable(), rootDivision);

...

 public IEnumerable<DivisionHierarchy> GetDivisionHierarchy(IEnumerable<Division> allDivisions, Division parentDivision)
        {
            Guid? parentDivisionId = null;

            if (parentDivision != null)
                parentDivisionId = parentDivision.ID;

            var childDivisions = allDivisions.Where(division => division.DivisionID == parentDivisionId);

            Collection<DivisionHierarchy> hierarchy = new Collection<DivisionHierarchy>();

            foreach (var div in childDivisions)
            {
                DivisionHierarchy divisionHierarchy = new DivisionHierarchy();
                divisionHierarchy.Division = div;
                divisionHierarchy.Divisions = GetDivisionHierarchy(allDivisions, div);
                hierarchy.Add(divisionHierarchy);
            }

            return hierarchy;
        }

Respuestas a la pregunta(2)

Su respuesta a la pregunta