public IReadOnlyList <T> Find(Specification <T> specification, int page = 0, int pageSize = 100) { using (ISession session = SessionFactory.OpenSession()) { return(session.Query <T>() .Where(specification.ToExpression()) .Skip(page * pageSize) .Take(pageSize) .ToList()); } }
public override Expression <Func <T, bool> > ToExpression() { var leftExpression = _left.ToExpression(); var rightExpression = _right.ToExpression(); var paramExpr = Expression.Parameter(typeof(T)); var exprBody = Expression.OrElse(leftExpression.Body, rightExpression.Body); exprBody = (BinaryExpression) new ParameterReplacer(paramExpr).Visit(exprBody); var finalExpr = Expression.Lambda <Func <T, bool> >(exprBody, paramExpr); return(finalExpr); }