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

aber Stadt, Gebiet oder Land kann null sein. Wie kann ich null in DB mit nhibernate vergleichen?Nhibernate Restriktions.Eq und Null

Antwort

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

Z. B .:

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

Auch HHH-2951

+0

Eine andere Art und Weise sehen, es zu schreiben: return (Wert == null)? Restrictions.IsNull (Eigenschaft): Restrictions.Eq (Eigenschaft, Wert); –

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