0

私はこのデータベース構造を持っています:

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でこのクエリを実行するにはどうすればよいですか?

4

1 に答える 1

1

これを試して:

var res = Session.QueryOver<Product>()
    .WhereRestrictionOn(x => x.Categories).IsEmpty()
    .List();
于 2013-02-20T12:58:19.173 に答える