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

时间:2010-02-16 13:50:37

标签: nhibernate icriteria

在我的系统中,用户拥有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查询来选择未分配给用户的所有类别,但是我被卡住了。理想情况下,我不想从Category到User创建导航属性,但是我初学者知道NHibernate,这是我能看到的唯一解决方案。

是否存在使用当前数据模型类执行此操作的ICriteria查询?

感谢您的帮助。

1 个答案:

答案 0 :(得分:1)

这不是我的头脑,但可能是一个有用的指针。

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

您可能会感觉到将在此处生成的SQL:

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

希望这有帮助,对不起我无法测试它:)

托宾