2

我有一个项目列表,其中包含对帖子的所有评论和回复。我想通过将 CommentID 与 ReplyToCommentId 进行比较,根据评论和回复来格式化它。

这是我使用 foreach 循环来获得我想用 linq 替换的结果

List<UserComment> comments = GetComments(SomeID).ToList();

int i = 0;
  foreach(var item in comments) {
    if(item.IsReply == false) {
      i++;
      formatedComments.Add(item);
      foreach(var replys in comments) {
        if(item.CommentID == replys.ReplyToCommentId) {
          i++;
          formatedComments.Add(replys);
        }
      }
    }

这在 LINQ 中是否可行。

提前致谢。

4

1 回答 1

1
from c in comments
where !c.IsReply
from r in new[] { c }.Concat(
                    comments.Where(r => c.CommentID == r.ReplyToCommentId)
)
select r

或者

comments
    .Where(c => !c.IsReply)
    .SelectMany(c => new[] { c }.Concat(
                    comments.Where(r => c.CommentID == r.ReplyToCommentId)
    )

您可以通过用预先计算的替换嵌套调用来使其更快(O(n)而不是)O(n2)WhereToLookup(r => r.ReplyToCommentId)

于 2012-04-26T12:16:42.527 回答