nhibernate - LINQ-to-NHibernate:无法将 Linq Skip() 和 Take() 与 FetchMany 一起使用

标签 nhibernate paging linq-to-nhibernate nhibernate-3 nhibernate-projections

我有这些实体:

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/

相关文章:

nhibernate - NHibernate 与 Microsoft Sync Framework 能很好地集成吗?

c# - POCO 对象中的非空约束

asp.net - ASP.NET 4.5 GridView.AllowCustomPaging 属性如何使这变得更简单?

asp.net-mvc-3 - MVC3 razor Webgrid 分页和排序超过 2000 条记录

c# - 当前不支持 LastResultOperator 结果运算符

linq - NHibernate - LINQ 限制

nhibernate - 流畅的 nhibernate 一级缓存未按预期工作

c# - 从 NHibernate 调用存储过程并检索 @@ROWCOUNT

c# - NHibernate - 如何解决 SQL Server 中的参数计数限制

python - 如何在模型级别分页数据(django)