This lets me build up expressions to be passed in for searching:
[Test]
public void Can_Use_QueryHandler()
{
QueryHandler<Event> queryHandler = new
QueryHandler<Event>();
queryHandler.AddCriteria(x =>
x.Venue.Address.Region.Name.Equals("Western Cape"));
queryHandler.AddCriteria(x => x.Name.Contains("Test"));
queryHandler.AddCriteria(x => x.EventStatus ==
EventStatus.Live);
IList<Event> results;
using (UnitOfWorkScope scope = new UnitOfWorkScope())
{
results =
_eventRepository.Search(queryHandler.Criteria).ToList();
}
}
public class QueryHandler<T> where T : IEntity
{
private IList<Expression<Func<T, bool>>> _criteria;
public QueryHandler(){
_criteria = new List<Expression<Func<T, bool>>>();
}
/// <summary>
///
/// </summary>
/// <param name="func">A lambda function to apply</param>
public void AddCriteria(Expression<Func<T, bool>> func)
{
_criteria.Add(func);
}
public IList<Expression<Func<T, bool>>> Criteria
{
get
{
return _criteria;
}
}
}