/// <summary> /// 判断是否存在。 /// </summary> /// <param name="entityType">模型实例。</param> /// <param name="expression">条件表达式。</param> /// <returns>返回SQL构建实例。</returns> public virtual SqlIndentedStringBuilder Any(IEntityType entityType, Expression expression) { var builder = new SqlIndentedStringBuilder(); builder.Append("SELECT 1 FROM ").Append(SqlHelper.DelimitIdentifier(entityType.Table)); builder.AppendEx(Visit(expression), " WHERE {0}").Append(SqlHelper.StatementTerminator); return(builder); }
/// <summary> /// 删除实例。 /// </summary> /// <param name="entityType">模型实例。</param> /// <param name="expression">条件表达式。</param> /// <returns>返回SQL构建实例。</returns> public virtual SqlIndentedStringBuilder Delete(IEntityType entityType, Expression expression) { var builder = new SqlIndentedStringBuilder(); builder.Append("DELETE FROM ").Append(SqlHelper.DelimitIdentifier(entityType.Table)); builder.AppendEx(Visit(expression), " WHERE {0}").Append(SqlHelper.fieldsTerminator); return(builder); }
/// <summary> /// 更新实例。 /// </summary> /// <param name="entityType">模型实例。</param> /// <param name="expression">条件表达式。</param> /// <param name="parameters">匿名对象。</param> /// <returns>返回SQL构建实例。</returns> public virtual SqlIndentedStringBuilder Update(IEntityType entityType, Expression expression, LambdaExpression parameters) { var builder = new SqlIndentedStringBuilder(); builder.Append("UPDATE ").Append(SqlHelper.DelimitIdentifier(entityType.Table)).Append(" SET "); builder.Append(VisitUpdateExpression(parameters)); builder.AppendEx(Visit(expression), " WHERE {0}").Append(SqlHelper.StatementTerminator); return(builder); }
/// <summary> /// 更新实例。 /// </summary> /// <param name="entityType">模型实例。</param> /// <param name="expression">条件表达式。</param> /// <param name="parameters">匿名对象。</param> /// <returns>返回SQL构建实例。</returns> public virtual SqlIndentedStringBuilder Update(IEntityType entityType, Expression expression, object parameters) { var builder = new SqlIndentedStringBuilder(); builder.Append("UPDATE ").Append(SqlHelper.DelimitIdentifier(entityType.Table)).Append(" SET "); builder.CreateObjectParameters(parameters); builder.JoinAppend(builder.Parameters.Keys.Select( name => $"{SqlHelper.DelimitIdentifier(name)}={SqlHelper.Parameterized(name)}")); builder.AppendEx(Visit(expression), " WHERE {0}").Append(SqlHelper.StatementTerminator); return(builder); }
/// <summary> /// 聚合函数。 /// </summary> /// <param name="entityType">模型实例。</param> /// <param name="method">聚合函数。</param> /// <param name="column">聚合列。</param> /// <param name="expression">条件表达式。</param> /// <param name="nullColumn">当<paramref name="column"/>为空的时候,使用的值。</param> /// <returns>返回SQL构建实例。</returns> public virtual SqlIndentedStringBuilder Scalar(IEntityType entityType, string method, LambdaExpression column, Expression expression, string nullColumn = null) { if (column != null) { nullColumn = SqlHelper.DelimitIdentifier(column.GetPropertyAccess().Name); } var builder = new SqlIndentedStringBuilder(); builder.Append($"SELECT {method}({nullColumn}) FROM {SqlHelper.DelimitIdentifier(entityType.Table)}"); builder.AppendEx(Visit(expression), " WHERE {0}") .AppendLine(SqlHelper.StatementTerminator); return(builder); }