0

各コメントが他のコメントの回答になる可能性があるというコメント用のこのモデルがあります。

 public class Comment
 {
    public virtual int Id { get; set; }
    public virtual string Body { get; set; }
    public virtual DateTime? AddedDate { get; set; }
    public virtual bool IsApproved { get; set; }
    public virtual int LikeCount { get; set; }
    public virtual User User { get; set; }
    public virtual AnonymousUser AnonymousUser { get; set; }
    public virtual Post Post { get; set; }
    public virtual Page Page { get; set; }
    public virtual int? ParentId { get; set; }
    public virtual Comment Parent { get; set; }
    public ICollection<Comment> Children { get; set; }
    public virtual byte[] RowVersion { get; set; }
 }

「IsApproved==true」というコメントを取得するためにこのコードを試します

this._comments
            .Where(comment => comment.Post.Id == postId).Include(comment => comment.User)
            .Include(comment => comment.AnonymousUser)
            .Include(comment => comment.Children).Where(comment => comment.IsApproved == true)
            .OrderBy(comment => comment.AddedDate)
            .Skip(page * count)
            .Take(count).ToList()
            .Where(comment => comment.Parent == null).ToList();

しかし、このクエリは「IsApproved==true」というルートコメントだけを返します。

子供を含むすべてのコメントをフィルタリングするにはどうすればよいですか。

ありがとう

4

2 に答える 2

0

子をフィルタリングする場合は Any を試してください。

this._comments
            .Where(comment => comment.Post.Id == postId).Include(comment => comment.User)
            .Include(comment => comment.AnnonymousUser)
            .Where(comment => comment.Children.Any(child=>child.IsApproved == true))
            .OrderBy(comment => comment.AddedDate)
            .Skip(page * count)
            .Take(count).ToList()
            .Where(comment => comment.Parent == null).ToList();
于 2013-02-22T14:27:00.597 に答える
0

のため、ルート コメントのみが返され.Where(comment => comment.Parent == null)ます。

しかし、一般的に...

私があなたを正しく理解していれば、承認され、特定の投稿の下にあるフラットリストのすべてのコメント (子コメントを含む) を取得したいということでよろしいですか?

前提 : 各コメントには、投稿が取り込まれています。

this._comments
        .Include(comment => comment.User)
        .Include(comment => comment.AnnonymousUser)
        .Include(comment => comment.Children)
        .Where(comment => comment.IsApproved && comment.Post.Id == postId)
        .OrderBy(comment => comment.AddedDate)
        .Skip(page * count)
        .Take(count)
        .ToList();

編集:

または、承認された子をフィルター処理するだけの場合は、この記事http://msdn.microsoft.com/en-us/data/jj574232.aspxを参照してください。関連するエンティティを明示的に読み込むときにフィルターを適用するセクション

于 2013-02-22T14:40:30.913 に答える