我有这个数据库结构:
Products
ProductId
Categories
CategoryId
ProductsInCategories
ProductId
CategoryId
我需要查找不属于某个类别的所有产品。现在,我使用这段代码:
var results = Session
.CreateCriteria<Product>()
.List<Product>()
.Where(product=> !product.Categories.Any())
.ToList();
所以我返回数据库中的所有产品,然后过滤它们。这是低效的,我需要一个更好的方法。
我试过这段代码:
var res = Session.QueryOver<Product>()
.Left.JoinQueryOver(product=> product.Categhories)
.Where(categories => !categories.Any())
.TransformUsing(Transformers.DistinctRootEntity)
.List();
但它根本不起作用。我尝试了一些变化,但这也没有用。
我应该如何使用NHibernate执行此查询?
答案 0 :(得分:1)
试试这个:
var res = Session.QueryOver<Product>()
.WhereRestrictionOn(x => x.Categories).IsEmpty()
.List();