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

时间:2009-09-10 18:11:44

标签: 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>();

2 个答案:

答案 0 :(得分: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);
}

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

你也可以这样压缩它:

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

或第三种选择:

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

答案 1 :(得分:-2)

我刚刚使用HQL而不是标准api:

var result = _session.CreateQuery("from Post p order by p.CreatedOn where p.PostedBy.Id IN (" + sb + ")").List<Post>();

一切正常:)