예제 #1
0
        /// <summary>
        /// Adds a where clause to the query
        /// </summary>
        /// <param name="predicate"></param>
        /// <returns>This instance so calls to this method are chainable</returns>
        public virtual IQuery <T> Where(Expression <Func <T, bool> > predicate)
        {
            if (predicate != null)
            {
                //TODO: This should have an SqlSyntax object passed in, this ctor is relying on a singleton
                var    expressionHelper = new ModelToSqlExpressionVisitor <T>();
                string whereExpression  = expressionHelper.Visit(predicate);

                _wheres.Add(new Tuple <string, object[]>(whereExpression, expressionHelper.GetSqlParameters()));
            }
            return(this);
        }
예제 #2
0
        /// <summary>
        /// Adds a where-in clause to the query.
        /// </summary>
        public virtual IQuery <T> WhereIn(Expression <Func <T, object> > fieldSelector, IEnumerable values)
        {
            if (fieldSelector == null)
            {
                return(this);
            }

            var expressionHelper = new ModelToSqlExpressionVisitor <T>(_sqlContext.SqlSyntax, _sqlContext.Mappers);
            var whereExpression  = expressionHelper.Visit(fieldSelector);

            _wheres.Add(new Tuple <string, object[]>(whereExpression + " IN (@values)", new object[] { new { values } }));
            return(this);
        }
예제 #3
0
        /// <summary>
        /// Adds a where clause to the query.
        /// </summary>
        public virtual IQuery <T> Where(Expression <Func <T, bool> > predicate)
        {
            if (predicate == null)
            {
                return(this);
            }

            var expressionHelper = new ModelToSqlExpressionVisitor <T>(_sqlContext.SqlSyntax, _sqlContext.Mappers);
            var whereExpression  = expressionHelper.Visit(predicate);

            _wheres.Add(new Tuple <string, object[]>(whereExpression, expressionHelper.GetSqlParameters()));
            return(this);
        }
예제 #4
0
        /// <summary>
        /// Adds a set of OR-ed where clauses to the query.
        /// </summary>
        /// <param name="predicates"></param>
        /// <returns>This instance so calls to this method are chainable.</returns>
        public virtual IQuery <T> WhereAny(IEnumerable <Expression <Func <T, bool> > > predicates)
        {
            if (predicates == null)
            {
                return(this);
            }

            StringBuilder sb         = null;
            List <object> parameters = null;
            Sql           sql        = null;

            foreach (var predicate in predicates)
            {
                // see notes in Where()
                var expressionHelper = new ModelToSqlExpressionVisitor <T>();
                var whereExpression  = expressionHelper.Visit(predicate);

                if (sb == null)
                {
                    sb         = new StringBuilder("(");
                    parameters = new List <object>();
                    sql        = new Sql();
                }
                else
                {
                    sb.Append(" OR ");
                    sql.Append(" OR ");
                }

                sb.Append(whereExpression);
                parameters.AddRange(expressionHelper.GetSqlParameters());
                sql.Append(whereExpression, expressionHelper.GetSqlParameters());
            }

            if (sb == null)
            {
                return(this);
            }

            sb.Append(")");
            //_wheres.Add(Tuple.Create(sb.ToString(), parameters.ToArray()));
            _wheres.Add(Tuple.Create("(" + sql.SQL + ")", sql.Arguments));

            return(this);
        }