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的计数来加载a 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如果您想访问标签列表(假设标签被映射为惰性),恕我直言,急切加载会提高性能(选择 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 回答