2010-08-01 4 views
7
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>(); 

하지만 도시, 지역 또는 국가는 null 일 수 있습니다. 어떻게 nhibernate와 DB에서 null을 비교할 수 있습니까?nhibernate Restrictions.Eq 및 null

답변

13
public AbstractCriterion EqOrNull(string property, object value) { 
    if (value == null) 
     return Restrictions.IsNull(property); 
    return Restrictions.Eq(property, value); 
} 

예컨대 :

session.CreateCriteria<Advertisements>() 
     .Add(EqOrNull(AdvertisementsProperties.City.ToString(), city)); 

는 또한 HHH-2951

+0

를 작성하는 또 다른 방법을 참조하십시오 리턴 (값 == NULL)? Restrictions.IsNull (속성) : Restrictions.Eq (속성, 값); –

5
session.CreateCriteria<Advertisements>() 
     .Add(Expression.Or(
       Expression.Eq("AdvName", "Cool Advertisement"), 
       Expression.IsNull("AdvName")) 
     ).List<Advertisements>();