个createCriteria内Expression.Disjunction()功能NHibernate
-
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%和slovenianName等%FOO%和类似%FOO%和slovenianName等%FOO%名”
,但我想获得 “名称等%FOO%或slovenianName等%FOO%或类似%FOO%或slovenianName等%FOO%名”
我可以使用Expression.Disjunction()为OR但是我有不能使用个createCriteria内部Expression.Disjunction问题()。谁能告诉我怎么可以使用或与个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; }
}
其他提示
上面的例子,因为这两个othere类都是Property类的宪法做工不错。
如果它是按该顺序它不起作用。
类属性{ 公共虚拟INT标识{获得;组; }结果 publice虚拟字符串名称{;组;} 公共虚拟城市城市{获得;设置;} //多对一 }
类市{结果 公共虚拟INT标识{获得;组; }结果 公共虚拟字符串名称{;组; }结果 公共虚拟国家国家{获得;组; } //多对一 }
类国家{结果 公共虚拟INT标识{获得;组; }结果 公共虚拟字符串名称{;组; }结果 }
不隶属于 StackOverflow