Example #1
0
        /// <summary>
        /// 解析表达式代码。
        /// </summary>
        /// <param name="expression">表达式。</param>
        /// <param name="getAliasFunc">获取别名方法。</param>
        /// <returns>返回解析后的SQL字符串。</returns>
        protected string Visit(Expression expression, Func <Type, string> getAliasFunc)
        {
            var visitor = _visitorFactory.Create(getAliasFunc);

            visitor.Visit(expression);
            return(visitor.ToString());
        }
Example #2
0
        /// <summary>
        /// 生成更新语句。
        /// </summary>
        /// <param name="table">表格。</param>
        /// <param name="instance">当前实例。</param>
        /// <param name="where">条件表达式。</param>
        /// <returns>返回生成的SQL语句。</returns>
        protected override string GenerateSqlUpdate(ITable table, object instance, Expression @where)
        {
            var builder = new IndentedStringBuilder();

            builder.Append("UPDATE ").Append(table).Append(" SET ");
            var items = new List <string>();

            ForEachProperty(instance, (k, v) =>
            {
                items.Add($"{SqlHelper.DelimitIdentifier(k)}={SqlHelper.EscapeLiteral(v)}");
            });
            builder.JoinAppend(items);
            var visitor = _visitorFactory.Create();

            visitor.Visit(where);
            builder.AppendEx(visitor.ToString(), " WHERE {0}");
            return(builder.ToString());
        }
Example #3
0
        /// <summary>
        /// 解析表达式。
        /// </summary>
        /// <param name="expression">表达式实例。</param>
        /// <returns>返回解析的表达式字符串。</returns>
        public virtual string Visit(Expression expression)
        {
            if (expression == null)
            {
                return(null);
            }
            var visitor = _visitorFactory.Create();

            visitor.Visit(expression);
            return(visitor.ToString());
        }
        /// <summary>
        /// 生成更新语句。
        /// </summary>
        /// <param name="entityType">当前实体。</param>
        /// <param name="instance">当前实例。</param>
        /// <param name="where">条件表达式。</param>
        /// <returns>返回生成的SQL语句。</returns>
        protected override string GenerateSqlUpdate(IEntityType entityType, object instance, Expression @where)
        {
            var builder = new IndentedStringBuilder();

            builder.Append("UPDATE ").Append(entityType.Table).Append(" SET ");
            var items = new List <string>();

            ForEachProperty(instance, (k, v) =>
            {
                if (k.IsDefined(typeof(NotUpdatedAttribute), true))
                {
                    return;
                }
                items.Add($"{SqlHelper.DelimitIdentifier(k.Name)}={SqlHelper.EscapeLiteral(v)}");
            });
            builder.JoinAppend(items);
            var visitor = _visitorFactory.Create();

            visitor.Visit(where);
            builder.AppendEx(visitor.ToString(), " WHERE {0}");
            return(builder.ToString());
        }