In questi giorni lavorando con NH mentre stavo realizzando un metodo di caricamento tramite ICriteria, il fido intellisense di VS2008 mi ha mostrato la classe Example.
Questa permette di filtrare i dati usando un oggetto "semipopolato" per costruire la clausola where.
Ad esempio, supponete di voler caricare tutti gli ordini in stato "accettato" del 09/04/2007. Usando l'oggetto Example potete scrivere:
Ordine ordine = new Ordine();
ordine.Stato = StatiOrdine.Accettato;
ordine.Data = new DateTime(2007, 04, 09);
ICriteria criteria = session.CreateCriteria(typeof(Ordine));
criteria.Add(Example.Create(ordine));
IList result = criteria.List();
In pratica NH cerca tra le proprietà dell'oggetto ordine quelle che hanno un valore diverso dal default (null, zero, DateTime.MinValue, ecc...) e le usa per costruire il filtro.
L'ho subito utilizzato per implementare una funzionalità di ricerca all'interno di una mia applicazione.
NHibernate