Linq-to-Sql: recursivamente obtener niños

Tengo una tabla de comentarios que tiene un CommentID y un ParentCommentID. Estoy tratando de obtener una lista de todos los hijos del Comentario. Esto es lo que tengo hasta ahora, aún no lo he probado.

private List<int> searchedCommentIDs = new List<int>();
// searchedCommentIDs is a list of already yielded comments stored
// so that malformed data does not result in an infinite loop.
public IEnumerable<Comment> GetReplies(int commentID) {
    var db = new DataClassesDataContext();
    var replies = db.Comments
        .Where(c => c.ParentCommentID == commentID 
            && !searchedCommentIDs.Contains(commentID));
    foreach (Comment reply in replies) {
        searchedCommentIDs.Add(CommentID);
        yield return reply;
        // yield return GetReplies(reply.CommentID)); // type mis-match.
        foreach (Comment replyReply in GetReplies(reply.CommentID)) {
            yield return replyReply;
        }
    }
}

2 preguntas:

¿Hay alguna forma obvia de mejorar esto? (Además de quizás crear una vista en sql con un CTE.) ¿Cómo es que no puedo dar unIEnumerable <Comment> a un IEnumerable<Comment>, solamenteComment ¿sí mismo ¿Hay alguna forma de usar SelectMany en esta situación?

Respuestas a la pregunta(1)

Su respuesta a la pregunta