代码之家  ›  专栏  ›  技术社区  ›  Richard Garside

使用ICriteria接口选择NHibernate中不在集合中的对象

  •  0
  • Richard Garside  · 技术社区  · 14 年前

    在我的系统中,用户拥有0个或更多类别。以下是我的模型类的简化版本:

    public class User
    {
        public virtual String Name {get; set;}
        public virtual IList<Category> Categories { get; set; }
    }
    
    public class Category
    {
        public virtual String Title {get; set;}
    }
    

    我现在想创建一个ICriteria查询来选择所有没有分配给用户的类别,但是我被卡住了。理想情况下,我不想创建一个从类别到用户的导航属性,但以我对NHibernate的初学者知识,这是我能看到的唯一解决方案。

    是否有一个ICriteria查询可以对当前的数据模型类执行此操作?

    谢谢你的帮助。

    1 回复  |  直到 14 年前
        1
  •  1
  •   tobinharris    14 年前

    这是我的想法,但可能是一个有用的指针。

    var crit = _session.CreateCriteria<Category>("c")
                          .Add(
                            Subqueries.PropertyNotIn("c.id",
                                DetachedCriteria.For<User>("u")
                                    .CreateCriteria("Categories","uc")
                                    .SetProjection(Projections.Property("uc.id"))                                    
                            ));
    var unassignedCategories = crit.List<Category>();
    

    select c.* from categories where c.id not in (select uc.id from usercategories)
    

    希望这有帮助,很抱歉我没能测试它:)

    推荐文章