0

私のシステムでは、ユーザーは 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 クエリはありますか?

ご協力いただきありがとうございます。

4

1 に答える 1

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)

これが役に立てば幸いです。申し訳ありませんが、テストできませんでした:)

トビン

于 2010-02-16T15:50:50.650 に答える