отличный момент. не думал об этом

я есть таблица комментариев, которая имеет CommentID и ParentCommentID. Я пытаюсь получить список всех детей комментария. Это то, что я имею до сих пор, я еще не проверял это.

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 вопроса:

Есть ли очевидный способ улучшить это? (Кроме того, возможно, создание представления в SQL с CTE.)Почему я не могу датьIEnumerable <Comment> к IEnumerable<Comment>, толькоComment сам?Есть ли способ использовать SelectMany в этой ситуации?

Ответы на вопрос(1)

Ваш ответ на вопрос