/// <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()); }
/// <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()); }
/// <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()); }