0

在我的系统中,用户拥有 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 查询可以对当前数据模型类执行此操作?

谢谢你的帮助。

4

1 回答 1

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)

希望这会有所帮助,很抱歉我无法对其进行测试:)

托宾

于 2010-02-16T15:50:50.650 回答