J'ai une table Comment qui a un CommentID et un ParentCommentID. J'essaie d'obtenir une liste de tous les enfants du Commentaire. C'est ce que j'ai jusqu'ici, je ne l'ai pas encore testé.Linq-to-Sql: obtenir récursivement des enfants
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 questions:
- Y at-il moyen évident d'améliorer cela? (En plus de créer peut-être une vue en sql avec un CTE.)
- Comment se fait-il que je ne puisse pas donner un
IEnumerable <Comment>
à un IEnumerable<Comment>
, seulementComment
lui-même? - Est-il possible d'utiliser SelectMany dans ce cas?
Est-ce Linq to SQL ou Linq to Entities? – bendewey