0

私はこれらのエンティティを持っています:

public class Post {
    public virtual int Id { get; set; }
    public virtual ICollection<Tag> Tags { get; set; }
    public virtual ICollection<Comment> Comments { get; set; }
}

public class Tag {
    public virtual int Id { get; set; }
    public virtual ICollection<Post> Posts { get; set; }
}

public class Comment {
    public virtual int Id { get; set; }
    public virtual Post Post { get; set; }
}

Post関連するTags と関連するComments の count byをロードしたいLINQ。私はこれを使用します:

var posts = session
    .Query<Post>()
    .OrderBy(t => t.Id)
    .Select(t => new {
        Post = t,
        CommentsCount = t.Comments.Count(),
        Tags = t.Tags        
    }).ToList();

それで十分だと思いますか?または、私のコードよりも優れている可能性のある提案はありますか? ありがとう。

4

1 に答える 1

1

これは、マッピングと、フェッチされた結果で何をしたいかによって大きく異なります。Tagsタグリストにアクセスしたい場合(タグが遅延としてマップされていると仮定)、Imhoeager loadingはパフォーマンスを高速化します(N + 1を選択)。

var posts = session
    .Query<Post>()
    .Fetch(t => t.Tags)
    .OrderBy(t => t.Id)
    .Select(t => new {
        Post = t,
        CommentsCount = t.Comments.Count(),
        Tags = t.Tags        
    }).ToList();

http://ayende.com/blog/1328/combating-the-select-n-1-problem-in-nhibernate

于 2012-03-10T16:59:57.427 に答える