2

投稿に対するすべてのコメントと返信を含むアイテムの単一のリストを取得しました。CommentID と ReplyToCommentId を比較して、コメントと返信に応じてフォーマットしたいと思います。

これは、私がlinqに置き換えたい結果を得るためにforeachループを使用しているものです

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 に答える