在我的系统中,用户拥有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查询?
感谢您的帮助。
答案 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)
希望这有帮助,对不起我无法测试它:)
托宾