using System; using System.Linq.Expressions; namespace ZeroLevel.Specification { public class Specification { private Expression> _condition; public Expression> Condition { get { return _condition; } } public Specification(Expression> condition) { _condition = condition; } public bool IsSatisfiedBy(T o) { return _condition.Compile()(o); } public Specification And(Func condition) { _condition = _condition.AndFunc(condition); return this; } public Specification Or(Func condition) { _condition = _condition.OrFunc(condition); return this; } public Specification Not() { _condition = _condition.Not(); return this; } } }