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

时间:2013-02-20 10:25:39

标签: c# nhibernate queryover

我有这个数据库结构:

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

1 个答案:

答案 0 :(得分:1)

试试这个:

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