代码之家  ›  专栏  ›  技术社区  ›  Hannoun Yassir

为什么此nhibernate查询返回空列表?

  •  0
  • Hannoun Yassir  · 技术社区  · 15 年前

    为什么查询不起作用?它总是返回一个空列表(映射正常,我确信数据库中有数据!)有什么想法吗?

    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 回复  |  直到 15 年前
        1
  •  5
  •   mikeschuld KeithS    15 年前

    尝试使用类似的方法:

    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>();
    
        2
  •  -2
  •   Hannoun Yassir    15 年前

    我只是使用了HQL而不是标准API:

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

    一切正常:)