Advertisements advertisements = NHibernateSession.CreateCriteria(typeof(Advertisements))
.Add(Restrictions.Eq(AdvertisementsProperties.Price.ToString(), price))
.Add(Restrictions.Eq(AdvertisementsProperties.HollidayDuration.ToString(), hollidayDuration))
.Add(Restrictions.Eq(AdvertisementsProperties.Name.ToString(), name))
.Add(Restrictions.Eq(AdvertisementsProperties.Description.ToString(), description))
//.Add(Restrictions.Eq(AdvertisementsProperties.DepartureDate.ToString(), departureDate))
.Add(Restrictions.Eq(AdvertisementsProperties.City.ToString(), city))
.Add(Restrictions.Eq(AdvertisementsProperties.Area.ToString(), area))
.Add(Restrictions.Eq(AdvertisementsProperties.Country.ToString(), country))
.Add(Restrictions.Eq(AdvertisementsProperties.Agency.ToString(), agency))
.UniqueResult<Advertisements>();
但是城市,地区或国家/地区可以为空。如何将DB中的null与nhibernate进行比较?
答案 0 :(得分:15)
public AbstractCriterion EqOrNull(string property, object value) {
if (value == null)
return Restrictions.IsNull(property);
return Restrictions.Eq(property, value);
}
E.g:
session.CreateCriteria<Advertisements>()
.Add(EqOrNull(AdvertisementsProperties.City.ToString(), city));
另见HHH-2951
答案 1 :(得分:6)
session.CreateCriteria<Advertisements>()
.Add(Expression.Or(
Expression.Eq("AdvName", "Cool Advertisement"),
Expression.IsNull("AdvName"))
).List<Advertisements>();