Expression.Disjunction()流暢NHibernateの内部のcreateCriteria
-
19-09-2019 - |
質問
criteriaCount.CreateCriteria(AdvertisementsProperties.City.ToString())
.Add(Expression.Like(CitiesProperties.Name.ToString(), query, MatchMode.Anywhere))
.Add(Expression.Like(CitiesProperties.SlovenianName.ToString(), query, MatchMode.Anywhere))
.CreateCriteria(AdvertisementsProperties.Country.ToString())
.Add(Expression.Like(CountriesProperties.Name.ToString(), query, MatchMode.Anywhere))
.Add(Expression.Like(CountriesProperties.SlovenianName.ToString(), query, MatchMode.Anywhere));
<時間>
このリターン "%fooの%と%のfoo%などの%fooというの%とslovenianNameのような名前のような%fooというの%のような名前とslovenianName"
しかし、私は取得したいと思い、 "%fooの%や%のfoo%などの%fooというの%またはslovenianNameのような名前のような%fooというの%またはslovenianNameような名前"
私は、ORのためExpression.Disjunction()を使用することができますが、私は()私はExpression.Disjunction内のcreateCriteriaを使用できないという問題があります。誰かが私が一緒にORとのcreateCriteriaを使用する方法を教えてもらえます?
よろしく
解決
論理和外部使用CreateAlias()。
var result = session.CreateCriteria<Property>()
.CreateAlias("Cities", "city")
.CreateAlias("Countries", "country")
.Add(Restrictions.Disjunction()
.Add(Expression.Like("city.Name", query, MatchMode.Anywhere))
.Add(Expression.Like("city.SlovenianNam", query, MatchMode.Anywhere))
.Add(Expression.Like("country.Name", query, MatchMode.Anywhere))
.Add(Expression.Like("country.SlovenianNam", query, MatchMode.Anywhere))
).List();
対応entitesは以下の通りです。うまくいけば、彼らはあなたに似ています。
class Property
{
public virtual Guid Id { get; set; }
public virtual IList<City> Cities { set; get; }
public virtual IList<Country> Countries { set; get; }
}
class City
{
public virtual Guid Id { get; set; }
public virtual string Name { get; set; }
public virtual string SlovenianNam{ get; set; }
}
class Country
{
public virtual Guid Id { get; set; }
public virtual string Name { get; set; }
public virtual string SlovenianNam{ get; set; }
}
他のヒント
上記の例の良い働きます。
それがこの順である場合、それは動作しません。
クラスプロパティ{
パブリック仮想int型IDは{取得します。セットする; }
publice仮想文字列名{取得します。セットする;}
パブリック仮想都市の都市{取得します。セット;} //多くの1に
}
クラスの市{
パブリック仮想int型IDは{取得します。セットする; }
パブリック仮想文字列の名前{取得します。セットする; }
パブリック仮想国の国{取得します。セットする; } // 1に、多くの
}
クラスの国{
パブリック仮想int型IDは{取得します。セットする; }
パブリック仮想文字列の名前{取得します。セットする; }
}