コード例 #1
0
        /// <summary>
        /// In
        /// </summary>
        /// <param name="expression">表达式树</param>
        /// <param name="sqlWrapper">sql打包对象</param>
        /// <returns>SqlWrapper</returns>
        public override SqlWrapper In(MethodCallExpression expression, SqlWrapper sqlWrapper)
        {
            var val = expression?.ToObject();

            if (val != null)
            {
                sqlWrapper += "(";
                if (val.GetType().IsArray || typeof(IList).IsAssignableFrom(val.GetType()))
                {
                    var list = val as IList;
                    if (list?.Count > 0)
                    {
                        foreach (var item in list)
                        {
                            SqlExpressionProvider.In(Expression.Constant(item, item.GetType()), sqlWrapper);
                            sqlWrapper += ",";
                        }
                    }
                }
                else
                {
                    SqlExpressionProvider.In(Expression.Constant(val, val.GetType()), sqlWrapper);
                }

                if (sqlWrapper[sqlWrapper.Length - 1] == ',')
                {
                    sqlWrapper.Remove(sqlWrapper.Length - 1, 1);
                }

                sqlWrapper += ")";
            }

            return(sqlWrapper);
        }
コード例 #2
0
        /// <summary>
        /// In
        /// </summary>
        /// <param name="expression">表达式树</param>
        /// <param name="sqlWrapper">sql包装器</param>
        /// <returns>SqlWrapper</returns>
        public override SqlWrapper In(NewArrayExpression expression, SqlWrapper sqlWrapper)
        {
            sqlWrapper += "(";
            foreach (var item in expression.Expressions)
            {
                SqlExpressionProvider.In(item, sqlWrapper);
                sqlWrapper += ",";
            }

            sqlWrapper.RemoveLast(',');

            sqlWrapper += ")";

            return(sqlWrapper);
        }
コード例 #3
0
        /// <summary>
        /// In
        /// </summary>
        /// <param name="expression">表达式树</param>
        /// <param name="sqlWrapper">sql打包对象</param>
        /// <returns>SqlWrapper</returns>
        public override SqlWrapper In(NewArrayExpression expression, SqlWrapper sqlWrapper)
        {
            sqlWrapper += "(";
            foreach (Expression expressionItem in expression.Expressions)
            {
                SqlExpressionProvider.In(expressionItem, sqlWrapper);
                sqlWrapper += ",";
            }

            if (sqlWrapper[sqlWrapper.Length - 1] == ',')
            {
                sqlWrapper.Remove(sqlWrapper.Length - 1, 1);
            }

            sqlWrapper += ")";

            return(sqlWrapper);
        }
コード例 #4
0
        /// <summary>
        /// In
        /// </summary>
        /// <param name="expression">表达式树</param>
        /// <param name="sqlWrapper">sql打包对象</param>
        /// <returns>SqlWrapper</returns>
        public override SqlWrapper In(MemberExpression expression, SqlWrapper sqlWrapper)
        {
            var obj = expression.ToObject();

            if (obj is IEnumerable array)
            {
                sqlWrapper += "(";
                foreach (var item in array)
                {
                    SqlExpressionProvider.In(Expression.Constant(item), sqlWrapper);
                    sqlWrapper += ",";
                }

                if (sqlWrapper[sqlWrapper.Length - 1] == ',')
                {
                    sqlWrapper.Remove(sqlWrapper.Length - 1, 1);
                }

                sqlWrapper += ")";
            }

            return(sqlWrapper);
        }
コード例 #5
0
 /// <summary>
 /// Not In
 /// </summary>
 /// <param name="expression">表达式树</param>
 /// <param name="sqlWrapper">sql打包对象</param>
 private static void NotIn(MethodCallExpression expression, SqlWrapper sqlWrapper)
 {
     SqlExpressionProvider.Where(expression.Arguments[0], sqlWrapper);
     sqlWrapper += " NOT IN ";
     SqlExpressionProvider.In(expression.Arguments[1], sqlWrapper);
 }
コード例 #6
0
        /// <summary>
        /// Contains
        /// </summary>
        /// <param name="expression">表达式树</param>
        /// <param name="sqlWrapper">sql打包对象</param>
        private static void Contains(MethodCallExpression expression, SqlWrapper sqlWrapper)
        {
            if (expression.Object != null)
            {
                if (typeof(IList).IsAssignableFrom(expression.Object.Type))
                {
                    SqlExpressionProvider.Where(expression.Arguments[0], sqlWrapper);
                    sqlWrapper += " IN ";
                    SqlExpressionProvider.In(expression.Object, sqlWrapper);
                }
                else
                {
                    SqlExpressionProvider.Where(expression.Object, sqlWrapper);
                    switch (sqlWrapper.DatabaseType)
                    {
                    case DatabaseType.SqlServer:
                        sqlWrapper += " LIKE '%' + ";
                        break;

                    case DatabaseType.MySql:
                    case DatabaseType.PostgreSql:
                        sqlWrapper += " LIKE CONCAT('%',";
                        break;

                    case DatabaseType.Oracle:
                    case DatabaseType.Sqlite:
                        sqlWrapper += " LIKE '%' || ";
                        break;

                    default:
                        break;
                    }
                    SqlExpressionProvider.Where(expression.Arguments[0], sqlWrapper);
                    switch (sqlWrapper.DatabaseType)
                    {
                    case DatabaseType.SqlServer:
                        sqlWrapper += " + '%'";
                        break;

                    case DatabaseType.MySql:
                    case DatabaseType.PostgreSql:
                        sqlWrapper += ",'%')";
                        break;

                    case DatabaseType.Oracle:
                    case DatabaseType.Sqlite:
                        sqlWrapper += " || '%'";
                        break;

                    default:
                        break;
                    }
                }
            }
            else if (expression.Arguments.Count > 1 && expression.Arguments[1] is MemberExpression memberExpression)
            {
                SqlExpressionProvider.Where(memberExpression, sqlWrapper);
                sqlWrapper += " IN ";
                SqlExpressionProvider.In(expression.Arguments[0], sqlWrapper);
            }
        }