Obtener todos los niños en una lista - C # recursiva

C # | .NET 4.5 | Entity Framework 5

Tengo una clase en Entity Framework que se parece a esto:

public class Location
{
   public long ID {get;set;}
   public long ParentID {get;set;}
   public List<Location> Children {get;set;}
}

ID es el identificador de la ubicación, ParentID lo vincula con un padre, e Hijos contiene todas las ubicaciones secundarias de la ubicación principal. Estoy buscando una manera fácil, probablemente recursiva, de obtener todos los "Lugares" y sus hijos en una sola Lista que contenga los Location.ID. Estoy teniendo problemas para conceptualizar esto recursivamente. Cualquier ayuda es apreciada.

Esto es lo que tengo hasta ahora, es una extensión de la clase de entidad, pero creo que podría hacerse mejor / más simple:

public List<Location> GetAllDescendants()
{
    List<Location> returnList = new List<Location>();
    List<Location> result = new List<Location>();
    result.AddRange(GetAllDescendants(this, returnList));
    return result;
}

public List<Location> GetAllDescendants(Location oID, ICollection<Location> list)
{
    list.Add(oID);
    foreach (Location o in oID.Children)
    {
            if (o.ID != oID.ID)
                    GetAllDescendants(o, list);
    }
    return list.ToList();
}

ACTUALIZADO

Terminé escribiendo la recursión en SQL, lanzando eso en un SP y luego metiéndolo en Entidad. Me pareció más limpio y más fácil que usar Linq, y a juzgar por los comentarios, Linq y Entity no parecen ser el mejor camino a seguir. ¡Gracias por toda la ayuda!

Respuestas a la pregunta(8)

Su respuesta a la pregunta