我有这些实体:
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
加载Tag
相关的Comment
和相关的LINQ
s的计数。我用这个:
var posts = session
.Query<Post>()
.OrderBy(t => t.Id)
.Select(t => new {
Post = t,
CommentsCount = t.Comments.Count(),
Tags = t.Tags
}).ToList();
你觉得这够吗?或者你有什么建议可能比我的代码更好?感谢。
答案 0 :(得分:1)
这在很大程度上取决于您的映射以及您想要对获取的结果执行的操作。如果你想访问标签列表(假设标签被映射为懒惰),Imho eager loading 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