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?