0

次のような国と州のドメインモデルがあります(以下を参照)。

(Crieteria APIまたはHQLを使用して)特定の国のすべての州を取得したい。パラメータとしてCountryCodeを受け取ります。

NHibernateで理解していることから、国をロードしてから、「Country Object」を使用して2番目のリポジトリに呼び出しを発行し、クリエリアでExpression.Eq()を作成できるようにする必要があります。特定の国のすべての州を取得して、単一のクエリを使用する方法はありますか?単純なSQL内部結合を実行してから、国コードに制約を追加したいだけです。

それは射影と関係があると確信していますが、私が見つけた唯一の例は単一のモデルのものであり、私が意図していることではない集計関数の使用方法を示しています。

ご助力ありがとうございます !

私の現在のリポジトリ呼び出しは次のようになります:

 public IList<Model.StateProvinces> LoadStateProvincesForAutocomplete(string partialName, string countryCode)
 {
    CountryRepository countryRepo = new CountryRepository();
    Model.Country currentCountry = countryRepo.Get(countryCode);


    return
    _session.CreateCriteria<Model.StateProvince>()
        .Add(Expression.Eq("Country", currentCountry))
        .Add(Expression.Like("Name", partialName, MatchMode.Anywhere))
        .List<Model.StateProvince>();
 }

そして私のモデルは次のように定義されています:

public class Country
{
   public virtual int Id { get; set; }
   public virtual string Code { get; set; }
   public virtual string NameEn { get; set; }
   public virtual string NameFr { get; set; }
   public virtual List<Model.StateProvince> StateProvinces { get; set; }
}

public class StateProvince
{
        public virtual Country Country { get; set; }
        public virtual int Id { get; set; }
        public virtual string Code { get; set; }
        public virtual string NameEn { get; set; }
        public virtual string NameFr { get; set; }
 }
4

1 に答える 1

0

ICriteriaのラムダ拡張を使用する場合は、かなり単純なはずです。

session.CreateCriteria<StateProvince>().Add(s=>s.Country.NameEn == "United States").List();

これにより、2つのエンティティの関係がHBMに適切にマッピングされている限り、適切な結合と等式の制約が追加されます。

また、NHibernate.Linq名前空間を使用してLinq2NHを試してください。

session.Linq<StateProvince>().Where(s=>s.Country.NameEn == "United States").ToList();

これを読んでいるときに、Linqクエリを設定しています。汗はまったくありません。

于 2010-12-07T21:01:24.593 に答える