我有这些实体:
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; }
}
我想按 Keyword
和评论计数加载 BlogPost
的分页列表。所以我尝试这样做:
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)
时,它起作用了!例如
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();
您是否知道通过包含关键字
来获取多行?感谢您的任何建议。
我正在使用NHibernate 3.2 通过代码映射
。
最佳答案
问题在于 nhibernate linq 提供程序尚未完全实现。
您可以将skip/take调用移至ToList()之后,但随后您将过滤整个结果集,而不是专门查询与该范围匹配的记录。
或者,您可以使用 QueryOver<> api,它根据以下答案对 Take 和 Skip 提供适当支持:https://stackoverflow.com/a/5073510/493
关于nhibernate - LINQ-to-NHibernate:无法将 Linq Skip() 和 Take() 与 FetchMany 一起使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9668608/