2

我有这些实体:

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 和评论数加载 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)它时!例如

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();

您有什么想法可以通过包含Keywords 来获取多行吗?感谢您的任何建议。


我正在使用NHibernate 3.2 mapping by code.

4

2 回答 2

1

问题是 nhibernate linq 提供程序还没有完全实现。

您可以将 skip / take 调用移动到ToList()之后,但随后您将过滤整个结果集,而不是专门查询与该范围匹配的记录。

或者,您可以使用 QueryOver<> api,它对 Take 和 Skip 有适当的支持,按照这个答案:https ://stackoverflow.com/a/5073510/493

于 2012-03-12T14:14:21.620 回答
1

这现在应该在 3.3.3.GA 中得到支持

http://sourceforge.net/p/nhibernate/news/2013/03/nhiberate-333ga-released/

于 2014-01-02T23:39:27.663 回答