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));
This return "name like %foo% and slovenianName like %foo% and name like %foo% and slovenianName like %foo%"
but i would like to get "name like %foo% or slovenianName like %foo% or name like %foo% or slovenianName like %foo%"
i can use Expression.Disjunction() for OR but i have problem that i can not use CreateCriteria inside Expression.Disjunction(). Can someone tell me how can i use OR and CreateCriteria together?
Regards
Use CreateAlias outside the Disjunction().
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();
The corresponding entites are below. Hopefully they resemble yours.
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; }
}