我有这些实体:
public class BlogPost {
public virtual int Id { get; set; }
public virtual IList<Keyword> Keywords { get; set; }
public virtual IList<BlogComment> Comments { get; set; }
}
public class BlogComment {
public virtual int Id { get; set; }
public virtual BlogPost Post { get; set; }
}
public class Keyword {
public virtual int Id { get; set; }
public virtual IList<BlogPost> BlogPosts { get; set; }
}
我想通过BlogPost
和评论计数来加载Keyword
s的分页列表。所以我试试这个:
var entities = session.Query<BlogPost>()
.Where(t => t.Published)
.FetchMany(t => t.Keywords)
.OrderByDescending(t => t.UpdatedAt)
.Skip((pageNumber - 1) * pageSize).Take(pageSize)
.Select(t => new {
CommentsCount = t.Comments.Count(),
Post = t
})
.ToList();
但是发生以下错误:
不支持指定的方法。
当我删除.Skip((pageNumber - 1) * pageSize).Take(pageSize)
时,它有效! e.g。
var entities = session.Query<BlogPost>()
.Where(t => t.Published)
.FetchMany(t => t.Keywords)
.OrderByDescending(t => t.UpdatedAt)
// remove the below line
//.Skip((pageNumber - 1) * pageSize).Take(pageSize)
.Select(t => new {
CommentsCount = t.Comments.Count(),
Post = t
})
.ToList();
您有任何想法请通过加入Keyword
来获取一些行吗?谢谢你的任何建议。
我正在使用NHibernate 3.2 mapping by code
。
答案 0 :(得分:1)
问题是nhibernate linq提供程序尚未完全实现。
您可以在 ToList()之后将skip / take调用移动到,但是您将要对整个结果集进行过滤,而不是专门查询与该范围匹配的记录。
或者您可以使用QueryOver&lt;&gt;根据这个答案,api对Take和Skip有适当的支持:https://stackoverflow.com/a/5073510/493
答案 1 :(得分:1)