选择NHibernate中没有多对多关系的项目

本文关键字:关系 项目 NHibernate 选择 | 更新日期: 2023-09-27 18:00:19

我有这样的数据库结构:

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执行此查询?

选择NHibernate中没有多对多关系的项目

试试这个:

var res = Session.QueryOver<Product>()
    .WhereRestrictionOn(x => x.Categories).IsEmpty()
    .List();