У меня есть таблица комментариев, которая имеет идентификатор CommentID и ParentCommentID. Я пытаюсь получить список всех детей комментария. Это то, что я до сих пор, я еще не тестировал.Linq-to-Sql: рекурсивно получить детей
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 в этой ситуации?
Является ли это Linq для SQL или Linq для объектов? – bendewey