为什么这个Nhibernate查询返回一个空列表?

Han*_*sir 0 nhibernate

为什么这个查询不起作用它总是返回一个空列表(映射是可以的,我确定数据库有数据!)任何想法?

var ids = //IList<int> of ids 


var result = _session.CreateCriteria(typeof (User))
            .Add(Restrictions.InG("Id", ids))
            .CreateCriteria("Posts")
            .AddOrder(Order.Asc("CreatedOn"))
            .SetMaxResults(20)
           .List<Post>();
Run Code Online (Sandbox Code Playgroud)

mik*_*uld 5

尝试使用这样的东西:

List<User> users = _session.CreateQuery("FROM User ORDER BY CreatedOn").List<User>().Where(u => ids.Contains(u.Id));

var posts = new List<Post>();
foreach(User user in users) {
    posts.AddRange(user.Posts);
}
Run Code Online (Sandbox Code Playgroud)

我想这将取决于你的用户已经有一个Posts集合,但大多数hibernate实现应该有类似的东西.

你也可以这样压缩它:

List<Post> posts = _session.CreateQuery("FROM Post ORDER BY CreatedOn").List<Post>().Where(p => ids.Contains(p.User.Id));
Run Code Online (Sandbox Code Playgroud)

或第三种选择:

List<Post> posts = _session.CreateQuery("FROM Post ORDER BY CreatedOn WHERE User.Id IN (" + ids.ToArray().Join(",") + ")").List<Post>();
Run Code Online (Sandbox Code Playgroud)