System.Text.StringBuilder.AppendFormat(System.IFormatProvider, string, params object[])

Here are the examples of the csharp api System.Text.StringBuilder.AppendFormat(System.IFormatProvider, string, params object[]) taken from open source projects. By voting up you can indicate which examples are most useful and appropriate.

1981 Examples 7

19 View Source File : SqlBuilderBase.cs
License : MIT License
Project Creator : 0x1000000

public bool VisitExprByteArrayLiteral(ExprByteArrayLiteral byteArrayLiteral, IExpr? parent)
        {
            if (byteArrayLiteral.Value == null || byteArrayLiteral.Value.Count < 1)
            {
                this.AppendNull();
            }
            else
            {
                this.AppendByteArrayLiteralPrefix();
                for (int i = 0; i < byteArrayLiteral.Value.Count; i++)
                {
                    this.Builder.AppendFormat("{0:x2}", byteArrayLiteral.Value[i]);
                }
                this.AppendByteArrayLiteralSuffix();
            }

            return true;
        }

19 View Source File : GmicPipeServer.cs
License : GNU General Public License v3.0
Project Creator : 0xC0000054

private unsafe string PrepareCroppedLayers(InputMode inputMode, RectangleF cropRect)
        {
            if (inputMode == InputMode.NoInput)
            {
                return string.Empty;
            }

            IReadOnlyList<GmicLayer> layers = GetRequestedLayers(inputMode);

            if (layers.Count == 0)
            {
                return string.Empty;
            }

            if (memoryMappedFiles.Capacity < layers.Count)
            {
                memoryMappedFiles.Capacity = layers.Count;
            }

            StringBuilder reply = new StringBuilder();

            foreach (GmicLayer layer in layers)
            {
                Surface surface = layer.Surface;
                bool disposeSurface = false;
                int destinationImageStride = surface.Stride;

                if (cropRect != WholeImageCropRect)
                {
                    int cropX = (int)Math.Floor(cropRect.X * layer.Width);
                    int cropY = (int)Math.Floor(cropRect.Y * layer.Height);
                    int cropWidth = (int)Math.Min(layer.Width - cropX, 1 + Math.Ceiling(cropRect.Width * layer.Width));
                    int cropHeight = (int)Math.Min(layer.Height - cropY, 1 + Math.Ceiling(cropRect.Height * layer.Height));

                    try
                    {
                        surface = layer.Surface.CreateWindow(cropX, cropY, cropWidth, cropHeight);
                    }
                    catch (ArgumentOutOfRangeException ex)
                    {
                        throw new InvalidOperationException(string.Format("Surface.CreateWindow bounds invalid, cropRect={0}", cropRect.ToString()), ex);
                    }
                    disposeSurface = true;
                    destinationImageStride = cropWidth * ColorBgra.SizeOf;
                }

                string mapName = "pdn_" + Guid.NewGuid().ToString();

                try
                {
                    MemoryMappedFile file = MemoryMappedFile.CreateNew(mapName, surface.Scan0.Length);
                    memoryMappedFiles.Add(file);

                    using (MemoryMappedViewAccessor accessor = file.CreateViewAccessor())
                    {
                        byte* destination = null;
                        RuntimeHelpers.PrepareConstrainedRegions();
                        try
                        {
                            accessor.SafeMemoryMappedViewHandle.AcquirePointer(ref destination);

                            for (int y = 0; y < surface.Height; y++)
                            {
                                ColorBgra* src = surface.GetRowAddressUnchecked(y);
                                byte* dst = destination + (y * destinationImageStride);

                                Buffer.MemoryCopy(src, dst, destinationImageStride, destinationImageStride);
                            }
                        }
                        finally
                        {
                            if (destination != null)
                            {
                                accessor.SafeMemoryMappedViewHandle.ReleasePointer();
                            }
                        }
                    }
                }
                finally
                {
                    if (disposeSurface)
                    {
                        surface.Dispose();
                    }
                }

                reply.AppendFormat(
                    CultureInfo.InvariantCulture,
                    "{0},{1},{2},{3}\n",
                    mapName,
                    surface.Width.ToString(CultureInfo.InvariantCulture),
                    surface.Height.ToString(CultureInfo.InvariantCulture),
                    destinationImageStride.ToString(CultureInfo.InvariantCulture));
            }

            return reply.ToString();
        }

19 View Source File : MySqlCodeFirstProvider.cs
License : MIT License
Project Creator : 17MKH

private string GenerateColumnAddSql(IColumnDescriptor column, IEnreplacedyDescriptor descriptor)
    {
        var sql = new StringBuilder();
        sql.AppendFormat("{0} ", AppendQuote(column.Name));

        switch (column.TypeName)
        {
            case "CHAR":
                //MySql中使用CHAR(36)来保存GUID格式
                sql.AppendFormat("CHAR({0}) ", column.Length);
                break;
            case "VARCHAR":
                sql.AppendFormat("VARCHAR({0}) ", column.Length);
                break;
            case "DECIMAL":
            case "DOUBLE":
            case "FLOAT":
                var precision = column.Precision < 1 ? 18 : column.Precision;
                var scale = column.Scale < 1 ? 4 : column.Scale;
                sql.AppendFormat("{0}({1},{2}) ", column.TypeName, precision, scale);
                break;
            default:
                sql.AppendFormat("{0} ", column.TypeName);
                break;
        }
        if (column.IsPrimaryKey)
        {
            sql.Append("PRIMARY KEY ");

            if (descriptor.PrimaryKey.IsInt || descriptor.PrimaryKey.IsLong)
            {
                sql.Append("AUTO_INCREMENT ");
            }
        }

        if (!column.Nullable)
        {
            sql.Append("NOT NULL ");
        }

        if (!column.IsPrimaryKey && column.DefaultValue.NotNull())
        {
            sql.AppendFormat("DEFAULT {0}", column.DefaultValue);
        }

        if (column.Description.NotNull())
        {
            sql.AppendFormat(" COMMENT '{0}' ", column.Description);
        }

        return sql.ToString();
    }

19 View Source File : SqliteCodeFirstProvider.cs
License : MIT License
Project Creator : 17MKH

private string GetColumnAddSql(IColumnDescriptor column, IEnreplacedyDescriptor descriptor)
    {
        var sql = new StringBuilder();
        sql.AppendFormat("{0} ", AppendQuote(column.Name));

        switch (column.TypeName)
        {
            case "decimal":
                var precision = column.Precision < 1 ? 18 : column.Precision;
                var scale = column.Scale < 1 ? 4 : column.Scale;
                sql.AppendFormat("{0}({1},{2}) ", column.TypeName, precision, scale);
                break;
            default:
                sql.AppendFormat("{0} ", column.TypeName);
                break;
        }
        if (column.IsPrimaryKey)
        {
            sql.Append("PRIMARY KEY ");

            if (descriptor.PrimaryKey.IsInt || descriptor.PrimaryKey.IsLong)
            {
                sql.Append("AUTOINCREMENT ");
            }
        }
        if (!column.IsPrimaryKey && column.DefaultValue.NotNull())
        {
            sql.AppendFormat("DEFAULT {0}", column.DefaultValue);
        }

        if (!column.Nullable)
        {
            sql.Append(" NOT NULL ");
        }

        return sql.ToString();
    }

19 View Source File : SqlServerCodeFirstProvider.cs
License : MIT License
Project Creator : 17MKH

private string GenerateColumnAddSql(IColumnDescriptor column, IEnreplacedyDescriptor descriptor)
    {
        var sql = new StringBuilder();
        sql.AppendFormat("{0} ", AppendQuote(column.Name));

        switch (column.TypeName)
        {
            case "NVARCHAR":
                sql.AppendFormat("NVARCHAR({0}) ", column.Length < 1 ? "MAX" : column.Length.ToString());
                break;
            case "DECIMAL":
            case "DOUBLE":
            case "FLOAT":
                var precision = column.Precision < 1 ? 18 : column.Precision;
                var scale = column.Scale < 1 ? 4 : column.Scale;
                sql.AppendFormat("{0}({1},{2}) ", column.TypeName, precision, scale);
                break;
            default:
                sql.AppendFormat("{0} ", column.TypeName);
                break;
        }
        if (column.IsPrimaryKey)
        {
            sql.Append("PRIMARY KEY ");

            //整数主键要自增
            if (descriptor.PrimaryKey.IsInt || descriptor.PrimaryKey.IsLong)
            {
                sql.Append("IDENreplacedY(1,1) ");
            }
        }

        if (!column.Nullable)
        {
            sql.Append("NOT NULL ");
        }

        if (!column.IsPrimaryKey && column.DefaultValue.NotNull())
        {
            sql.AppendFormat("DEFAULT({0})", column.DefaultValue);
        }

        return sql.ToString();
    }

19 View Source File : ExpressionResolver.cs
License : MIT License
Project Creator : 17MKH

public static void ResolveFrom(QueryBody queryBody, StringBuilder sqlBuilder, IQueryParameters parameters)
    {
        var dbAdapter = queryBody.DbAdapter;
        var first = queryBody.Joins.First();

        if (queryBody.Joins.Count < 2)
        {
            sqlBuilder.AppendFormat("{0}", dbAdapter.AppendQuote(first.TableName));

            //附加SqlServer的NOLOCK特性
            if (dbAdapter.Provider == DbProvider.SqlServer && first.NoLock)
            {
                sqlBuilder.Append(" WITH (NOLOCK)");
            }

            return;
        }

        sqlBuilder.AppendFormat("{0} AS {1}", dbAdapter.AppendQuote(first.TableName), first.Alias);
        //附加NOLOCK特性
        if (dbAdapter.Provider == DbProvider.SqlServer && first.NoLock)
        {
            sqlBuilder.Append(" WITH (NOLOCK)");
        }

        for (var i = 1; i < queryBody.Joins.Count; i++)
        {
            var join = queryBody.Joins[i];
            switch (join.Type)
            {
                case JoinType.Inner:
                    sqlBuilder.Append(" INNER");
                    break;
                case JoinType.Right:
                    sqlBuilder.Append(" RIGHT");
                    break;
                default:
                    sqlBuilder.Append(" LEFT");
                    break;
            }

            sqlBuilder.AppendFormat(" JOIN {0} AS {1}", dbAdapter.AppendQuote(join.TableName), join.Alias);
            //附加SqlServer的NOLOCK特性
            if (dbAdapter.Provider == DbProvider.SqlServer && first.NoLock)
            {
                sqlBuilder.Append(" WITH (NOLOCK)");
            }

            sqlBuilder.Append(" ON ");
            sqlBuilder.Append(Resolve(queryBody, join.On, parameters));

            if (join.Type == JoinType.Inner)
            {
                //过滤软删除
                if (queryBody.FilterDeleted && join.EnreplacedyDescriptor.IsSoftDelete)
                {
                    sqlBuilder.AppendFormat(" AND {0}.{1} = {2}", join.Alias, dbAdapter.AppendQuote(join.EnreplacedyDescriptor.GetDeletedColumnName()), dbAdapter.BooleanFalseValue);
                }

                //添加租户过滤
                if (queryBody.FilterTenant && join.EnreplacedyDescriptor.IsTenant)
                {
                    var x1 = dbAdapter.AppendQuote(DbConstants.TENANT_COLUMN_NAME);
                    var tenantId = queryBody.Repository.DbContext.AccountResolver.TenantId;
                    if (tenantId == null)
                    {
                        sqlBuilder.AppendFormat(" AND {0}.{1} IS NULL", join.Alias, x1);
                    }
                    else
                    {
                        sqlBuilder.AppendFormat(" AND {0}.{1} = '{2}'", join.Alias, x1, tenantId);
                    }
                }
            }
        }
    }

19 View Source File : ExpressionResolver.cs
License : MIT License
Project Creator : 17MKH

private static void ResolveCall(QueryBody queryBody, MethodCallExpression exp, LambdaExpression fullLambda, StringBuilder sqlBuilder, IQueryParameters parameters)
    {
        string columnName;
        switch (exp.Method.Name)
        {
            case "Contains":
                ResolveMethodForContains(queryBody, exp, sqlBuilder, parameters);
                break;
            case "NotContains":
                ResolveMethodForNotContains(queryBody, exp, sqlBuilder);
                break;
            case "StartsWith":
                ResolveMethodForStartsWith(queryBody, exp, sqlBuilder, parameters);
                break;
            case "EndsWith":
                ResolveMethodForEndsWith(queryBody, exp, sqlBuilder, parameters);
                break;
            case "Equals":
                ResolveMethodForEquals(queryBody, exp, fullLambda, sqlBuilder, parameters);
                break;
            case "Sum":
            case "Avg":
            case "Max":
            case "Min":
                var fullExp = (exp.Arguments[0] as UnaryExpression)!.Operand as LambdaExpression;
                columnName = queryBody.GetColumnName(fullExp!.Body);
                sqlBuilder.AppendFormat(" {0}", queryBody.DbAdapter.FunctionMapper(exp.Method.Name, columnName));
                break;
            default:
                if (exp.Object != null)
                {
                    switch (exp.Object.NodeType)
                    {
                        case ExpressionType.Constant:
                            var val = ResolveDynamicInvoke(exp);
                            AppendValue(queryBody, val, sqlBuilder, parameters);
                            break;
                        case ExpressionType.MemberAccess:
                            columnName = queryBody.GetColumnName(exp!.Object);
                            var args = Arguments2Object(exp.Arguments);
                            sqlBuilder.AppendFormat("{0}", queryBody.DbAdapter.FunctionMapper(exp.Method.Name, columnName, exp.Object.Type, args));
                            break;
                    }
                }

                break;
        }
    }

19 View Source File : GroupBySqlBuilder.cs
License : MIT License
Project Creator : 17MKH

private void ResolveSort(StringBuilder sqlBuilder, Expression exp, SortType sortType)
        {
            var sort = sortType == SortType.Asc ? "ASC" : "DESC";
            switch (exp.NodeType)
            {
                case ExpressionType.MemberAccess:
                    ResolveSort(sqlBuilder, exp as MemberExpression, sort);
                    break;
                case ExpressionType.Call:
                    var callExp = exp as MethodCallExpression;
                    var methodName = callExp.Method.Name;
                    switch (callExp.Object.NodeType)
                    {
                        case ExpressionType.Parameter:
                            //OrderBy(m => m.Sum(x => x.Id))
                            var fullLambda = (callExp.Arguments[0] as UnaryExpression).Operand as LambdaExpression;
                            var columnName = _queryBody.GetColumnName(fullLambda.Body);
                            sqlBuilder.AppendFormat(" {0} {1},", _queryBody.DbAdapter.FunctionMapper(methodName, columnName), sort);
                            break;
                        case ExpressionType.MemberAccess:
                            //OrderBy(m => m.Key.replacedle.Substring(3))
                            columnName = GetColumnName(callExp!.Object as MemberExpression);
                            var args = ExpressionResolver.Arguments2Object(callExp.Arguments);
                            sqlBuilder.AppendFormat(" {0} {1},", _dbAdapter.FunctionMapper(methodName, columnName, callExp.Object!.Type, args), sort);
                            break;
                    }
                    break;
            }
        }

19 View Source File : GroupBySqlBuilder.cs
License : MIT License
Project Creator : 17MKH

private void ResolveSort(StringBuilder sqlBuilder, MemberExpression memberExp, string sort)
        {
            switch (memberExp.Expression!.NodeType)
            {
                case ExpressionType.MemberAccess:
                    sqlBuilder.AppendFormat(" {0} {1},", GetColumnName(memberExp), sort);
                    break;
            }
        }

19 View Source File : QueryableSqlBuilder.cs
License : MIT License
Project Creator : 17MKH

private void SetUpdateInfo(StringBuilder sqlBuilder, IQueryParameters parameters)
    {
        var descriptor = _queryBody.Joins.First().EnreplacedyDescriptor;
        if (descriptor.IsEnreplacedyBase)
        {
            if (_queryBody.UseParameters)
            {
                var p1 = parameters.Add(_dbContext.AccountResolver.AccountId);
                sqlBuilder.AppendFormat(",{0} = @{1}", _dbAdapter.AppendQuote(descriptor.GetModifiedByColumnName()), p1);
                var p2 = parameters.Add(_dbContext.AccountResolver.AccountName);
                sqlBuilder.AppendFormat(",{0} = @{1}", _dbAdapter.AppendQuote(descriptor.GetModifierColumnName()), p2);
                var p3 = parameters.Add(DateTime.Now);
                sqlBuilder.AppendFormat(",{0} = @{1}", _dbAdapter.AppendQuote(descriptor.GetModifiedTimeColumnName()), p3);
            }
            else
            {
                sqlBuilder.AppendFormat(",{0} = ", _dbAdapter.AppendQuote(descriptor.GetModifiedByColumnName()));
                ExpressionResolver.AppendValue(_queryBody, _dbContext.AccountResolver.AccountId, sqlBuilder, parameters);
                sqlBuilder.AppendFormat(",{0} = ", _dbAdapter.AppendQuote(descriptor.GetModifierColumnName()));
                ExpressionResolver.AppendValue(_queryBody, _dbContext.AccountResolver.AccountName, sqlBuilder, parameters);
                sqlBuilder.AppendFormat(",{0} = ", _dbAdapter.AppendQuote(descriptor.GetModifiedTimeColumnName()));
                ExpressionResolver.AppendValue(_queryBody, DateTime.Now, sqlBuilder, parameters);
            }
        }
    }

19 View Source File : SqlServerCodeFirstProvider.cs
License : MIT License
Project Creator : 17MKH

private string GenerateCreateTableSql(IEnreplacedyDescriptor descriptor)
    {
        var columns = descriptor.Columns;
        var sql = new StringBuilder();
        sql.AppendFormat("CREATE TABLE {0}(", AppendQuote(descriptor.TableName));

        for (int i = 0; i < columns.Count; i++)
        {
            var column = columns[i];

            sql.Append(GenerateColumnAddSql(column, descriptor));

            if (i < columns.Count - 1)
            {
                sql.Append(",");
            }
        }

        sql.Append(");");

        foreach (var column in columns)
        {
            if (column.Description.NotNull())
            {
                sql.AppendFormat("EXECUTE sp_addextendedproperty N'MS_Description','{0}',N'user',N'dbo',N'table',N'{1}',N'column',N'{2}';", column.Description, descriptor.TableName, column.Name);
            }
        }

        return sql.ToString();
    }

19 View Source File : ExpressionResolver.cs
License : MIT License
Project Creator : 17MKH

public static void AppendValue(QueryBody queryBody, object value, StringBuilder sqlBuilder, IQueryParameters parameters)
    {
        if (value == null)
        {
            var len = sqlBuilder.Length;
            if (sqlBuilder[len - 1] == ' ' && sqlBuilder[len - 2] == '>' && sqlBuilder[len - 3] == '<')
            {
                sqlBuilder.Remove(len - 3, 3);
                sqlBuilder.Append("IS NOT NULL");
                return;
            }

            if (sqlBuilder[len - 1] == ' ' && sqlBuilder[len - 2] == '=')
            {
                sqlBuilder.Remove(len - 2, 2);
                sqlBuilder.Append("IS NULL");
            }

            return;
        }

        var dbAdapter = queryBody.DbAdapter;
        if (queryBody.UseParameters)
        {
            //使用参数化
            var pName = parameters.Add(value);
            sqlBuilder.Append(dbAdapter.AppendParameter(pName));
        }
        else
        {
            var type = value.GetType();
            //不使用参数化
            if (type.IsNullable())
            {
                type = Nullable.GetUnderlyingType(type);
            }

            if (type!.IsEnum)
            {
                sqlBuilder.AppendFormat("{0}", value.ToInt());
            }
            else if (type.IsBool())
            {
                sqlBuilder.AppendFormat("{0}", value.ToBool() ? dbAdapter.BooleanTrueValue : dbAdapter.BooleanFalseValue);
            }
            else if (type.IsDateTime())
            {
                sqlBuilder.AppendFormat("'{0:yyyy-MM-dd HH:mm:ss}'", value);
            }
            else if (type.IsString() || type.IsGuid())
            {
                sqlBuilder.AppendFormat("'{0}'", value);
            }
            else
            {
                sqlBuilder.AppendFormat("{0}", value);
            }
        }
    }

19 View Source File : ExpressionResolver.cs
License : MIT License
Project Creator : 17MKH

private static void ResolveMember(QueryBody queryBody, MemberExpression exp, LambdaExpression fullLambda, StringBuilder sqlBuilder, IQueryParameters parameters)
    {
        if (exp.Expression != null)
        {
            switch (exp.Expression.NodeType)
            {
                case ExpressionType.Parameter:
                    sqlBuilder.Append(queryBody.GetColumnName(exp));
                    break;
                case ExpressionType.Constant:
                    var val = ResolveDynamicInvoke(exp);
                    AppendValue(queryBody, val, sqlBuilder, parameters);
                    break;
                case ExpressionType.MemberAccess:
                    if (exp.Expression is MemberExpression subMemberExp && subMemberExp.Expression!.NodeType == ExpressionType.Constant)
                    {
                        val = ResolveDynamicInvoke(exp);
                        AppendValue(queryBody, val, sqlBuilder, parameters);
                    }
                    else if (exp.Expression.Type.IsString())
                    {
                        var columnName = queryBody.GetColumnName(exp.Expression);
                        sqlBuilder.AppendFormat("{0}", queryBody.DbAdapter.FunctionMapper(exp.Member.Name, columnName));
                    }
                    else if (DbConstants.ENreplacedY_INTERFACE_TYPE.IsImplementType(exp.Expression.Type))
                    {
                        //多表连接解析列信息,如:m.T1.Id
                        var columnName = queryBody.GetColumnName(exp);
                        sqlBuilder.Append(columnName);
                    }
                    break;
            }

            //针对简写方式的布尔类型解析 m => m.Deleted
            if (exp == fullLambda.Body && exp.NodeType == ExpressionType.MemberAccess && exp.Type == typeof(bool))
            {
                sqlBuilder.Append(" = ");
                AppendValue(queryBody, queryBody.DbAdapter.BooleanTrueValue, sqlBuilder, parameters);
            }
        }
    }

19 View Source File : QueryableSqlBuilder.cs
License : MIT License
Project Creator : 17MKH

public string BuildDeleteSql(IQueryParameters parameters)
    {
        var tableName = _queryBody.Joins.First().TableName;
        Check.NotNull(tableName, nameof(tableName), "未指定更新表");

        var sqlBuilder = new StringBuilder();

        sqlBuilder.AppendFormat("DELETE FROM {0} ", _dbAdapter.AppendQuote(tableName));

        var whereSql = ExpressionResolver.ResolveWhere(_queryBody, parameters);
        Check.NotNull(whereSql, nameof(whereSql), "生成条件sql异常,删除必须指定条件,防止误操作");
        sqlBuilder.AppendFormat(" {0}", whereSql);

        return sqlBuilder.ToString();
    }

19 View Source File : QueryableSqlBuilder.cs
License : MIT License
Project Creator : 17MKH

public string BuildSoftDeleteSql(IQueryParameters parameters)
    {
        var enreplacedyDescriptor = _queryBody.Joins.First().EnreplacedyDescriptor;
        if (!enreplacedyDescriptor.IsSoftDelete)
            throw new Exception("当前实体未实现软删除功能,无法调用该方法");

        var tableName = _queryBody.Joins.First().TableName;
        Check.NotNull(tableName, nameof(tableName), "未指定更新表");

        var deletedColumnName = enreplacedyDescriptor.GetDeletedColumnName();
        var deletedTimeColumnName = enreplacedyDescriptor.GetDeletedTimeColumnName();
        var deletedByColumnName = enreplacedyDescriptor.GetDeletedByColumnName();
        var deleterColumnName = enreplacedyDescriptor.GetDeleterColumnName();

        var sqlBuilder = new StringBuilder($"UPDATE {_dbAdapter.AppendQuote(tableName)} SET ");
        sqlBuilder.AppendFormat("{0} = {1},", _dbAdapter.AppendQuote(deletedColumnName), _dbAdapter.BooleanTrueValue);
        sqlBuilder.AppendFormat("{0} = ", _dbAdapter.AppendQuote(deletedTimeColumnName));
        ExpressionResolver.AppendValue(_queryBody, DateTime.Now, sqlBuilder, parameters);
        sqlBuilder.AppendFormat(",{0} = ", _dbAdapter.AppendQuote(deletedByColumnName));
        ExpressionResolver.AppendValue(_queryBody, _dbContext.AccountResolver.AccountId, sqlBuilder, parameters);
        sqlBuilder.AppendFormat(",{0} = ", _dbAdapter.AppendQuote(deleterColumnName));
        ExpressionResolver.AppendValue(_queryBody, _dbContext.AccountResolver.AccountName, sqlBuilder, parameters);

        var whereSql = ExpressionResolver.ResolveWhere(_queryBody, parameters);
        Check.NotNull(whereSql, nameof(whereSql), "生成条件sql异常");
        sqlBuilder.AppendFormat(" {0}", whereSql);

        return sqlBuilder.ToString();
    }

19 View Source File : QueryableSqlBuilder.cs
License : MIT License
Project Creator : 17MKH

public void ResolveSelectForEnreplacedy(StringBuilder sqlBuilder, int index = 0, List<IColumnDescriptor> excludeColumns = null)
    {
        var join = _queryBody.Joins[index];

        foreach (var col in join.EnreplacedyDescriptor.Columns)
        {
            if (excludeColumns != null && excludeColumns.Any(m => m == col))
                continue;

            //单个实体时不需要别名
            sqlBuilder.Append(IsSingleEnreplacedy ? $"{_dbAdapter.AppendQuote(col.Name)}" : $"{join.Alias}.{_dbAdapter.AppendQuote(col.Name)}");

            sqlBuilder.AppendFormat(" AS {0},", _dbAdapter.AppendQuote(col.PropertyInfo.Name));
        }
    }

19 View Source File : QueryableSqlBuilder.cs
License : MIT License
Project Creator : 17MKH

public void ResolveSelectForNew(StringBuilder sqlBuilder, NewExpression newExp, LambdaExpression fullLambda, List<IColumnDescriptor> excludeColumns = null)
    {
        for (var i = 0; i < newExp.Arguments.Count; i++)
        {
            var arg = newExp.Arguments[i];
            var alias = newExp.Members![i].Name;
            //成员
            if (arg.NodeType == ExpressionType.MemberAccess)
            {
                ResolveSelectForMember(sqlBuilder, arg as MemberExpression, fullLambda, excludeColumns, alias);
                continue;
            }
            //实体
            if (arg.NodeType == ExpressionType.Parameter && arg is ParameterExpression parameterExp)
            {
                ResolveSelectForEnreplacedy(sqlBuilder, fullLambda.Parameters.IndexOf(parameterExp), excludeColumns);
                continue;
            }
            //方法
            if (arg.NodeType == ExpressionType.Call && arg is MethodCallExpression callExp)
            {
                var columnName = _queryBody.GetColumnName(callExp!.Object);
                var args = ExpressionResolver.Arguments2Object(callExp.Arguments);
                sqlBuilder.AppendFormat("{0} AS {1},", _dbAdapter.FunctionMapper(callExp.Method.Name, columnName, callExp.Object!.Type, args), _dbAdapter.AppendQuote(alias));
            }
        }
    }

19 View Source File : QueryableSqlBuilder.cs
License : MIT License
Project Creator : 17MKH

public void ResolveSelectForMember(StringBuilder sqlBuilder, MemberExpression memberExp, LambdaExpression fullLambda, List<IColumnDescriptor> excludeCols, string alias = null)
    {
        alias ??= memberExp.Member.Name;
        string columnName;
        if (DbConstants.ENreplacedY_INTERFACE_TYPE.IsImplementType(memberExp.Type))
        {
            var index = _queryBody.Joins.FindIndex(m => m.EnreplacedyDescriptor.EnreplacedyType == memberExp.Type);
            ResolveSelectForEnreplacedy(sqlBuilder, index, excludeCols);
        }
        else if (memberExp.Expression!.Type.IsString())
        {
            columnName = _queryBody.GetColumnName(memberExp);
            sqlBuilder.AppendFormat("{0} AS {1},", _queryBody.DbAdapter.FunctionMapper(memberExp.Member.Name, columnName), _dbAdapter.AppendQuote(alias));
        }
        else if (DbConstants.ENreplacedY_INTERFACE_TYPE.IsImplementType(memberExp.Expression.Type))
        {
            var join = _queryBody.GetJoin(memberExp);
            if (excludeCols != null && excludeCols.Any(m => m == join.Item2))
                return;

            columnName = _queryBody.GetColumnName(join.Item1, join.Item2);
            sqlBuilder.AppendFormat("{0} AS {1},", columnName, _dbAdapter.AppendQuote(alias));
        }
    }

19 View Source File : QueryableSqlBuilder.cs
License : MIT License
Project Creator : 17MKH

public void ResolveSort(StringBuilder sqlBuilder)
    {
        if (_queryBody.Sorts.IsNullOrEmpty())
            return;

        var startLength = sqlBuilder.Length;
        sqlBuilder.Append(" ORDER BY");
        foreach (var sort in _queryBody.Sorts)
        {
            if (sort.Mode == QuerySortMode.Lambda)
            {
                ResolveSort(sqlBuilder, sort.Lambda.Body, sort.Lambda, sort.Type);
            }
            else
            {
                sqlBuilder.AppendFormat(" {0} {1},", sort.Sql, sort.Type == SortType.Asc ? "ASC" : "DESC");
            }
        }

        if (startLength + 9 == sqlBuilder.Length)
        {
            sqlBuilder.Remove(sqlBuilder.Length - 9, 9);
        }
        else if (startLength + 9 < sqlBuilder.Length)
        {
            sqlBuilder.Remove(sqlBuilder.Length - 1, 1);
        }
    }

19 View Source File : QueryableSqlBuilder.cs
License : MIT License
Project Creator : 17MKH

private void ResolveSort(StringBuilder sqlBuilder, Expression exp, LambdaExpression fullExp, SortType sortType)
    {
        switch (exp.NodeType)
        {
            case ExpressionType.MemberAccess:
                //m => m.replacedle
                //m => m.replacedle.Length
                //m => m.T1.replacedle
                //m => m.T1.Length
                //m => m.T1.replacedle.Length
                ResolveSort(sqlBuilder, exp as MemberExpression, sortType);
                break;
            case ExpressionType.Convert:
                //m => m.replacedle.Length
                if (exp is UnaryExpression unaryExpression)
                {
                    ResolveSort(sqlBuilder, unaryExpression.Operand as MemberExpression, sortType);
                }
                break;
            case ExpressionType.Call:
                var callExp = exp as MethodCallExpression;
                var memberExp = callExp!.Object as MemberExpression;
                var columnName = _queryBody.GetColumnName(memberExp);
                object[] args = null;
                if (callExp.Arguments.Any())
                {
                    args = new object[callExp.Arguments.Count];
                    for (int i = 0; i < callExp.Arguments.Count; i++)
                    {
                        args[i] = ((ConstantExpression)callExp.Arguments[i]).Value;
                    }
                }
                sqlBuilder.AppendFormat(" {0} {1},", _dbAdapter.FunctionMapper(callExp.Method.Name, columnName, callExp.Object!.Type, args), sortType == SortType.Asc ? "ASC" : "DESC");
                break;
            case ExpressionType.New:
                //m=>new { m.replacedle.Substring(2) }
                if (exp is NewExpression newExp)
                {
                    foreach (var arg in newExp.Arguments)
                    {
                        ResolveSort(sqlBuilder, arg, fullExp, sortType);
                    }
                }
                break;
        }
    }

19 View Source File : QueryableSqlBuilder.cs
License : MIT License
Project Creator : 17MKH

private void ResolveSort(StringBuilder sqlBuilder, MemberExpression memberExp, SortType sortType)
    {
        var sort = sortType == SortType.Asc ? "ASC" : "DESC";
        switch (memberExp.Expression!.NodeType)
        {
            case ExpressionType.Parameter:
                //m => m.replacedle
                var columnName = _queryBody.GetColumnName(memberExp);
                sqlBuilder.AppendFormat(" {0} {1},", columnName, sort);
                break;
            case ExpressionType.MemberAccess:
                //m => m.replacedle.Length
                //m => m.T1.replacedle
                //m => m.T1.Length
                //m => m.T1.replacedle.Length
                if (memberExp.Expression.Type.IsString())
                {
                    columnName = _queryBody.GetColumnName(memberExp.Expression);
                    sqlBuilder.AppendFormat(" {0} {1},", _dbAdapter.FunctionMapper(memberExp.Member.Name, columnName), sort);
                }
                else if (DbConstants.ENreplacedY_INTERFACE_TYPE.IsImplementType(memberExp.Expression.Type))
                {
                    columnName = _queryBody.GetColumnName(memberExp);
                    sqlBuilder.AppendFormat(" {0} {1},", columnName, sort);
                }

                break;
        }
    }

19 View Source File : ValidateResultFormatAttribute.cs
License : MIT License
Project Creator : 17MKH

public override void OnResultExecuting(ResultExecutingContext context)
    {
        if (!context.ModelState.IsValid)
        {
            try
            {
                var errors = context.ModelState
                    .Where(m => m.Value!.ValidationState == ModelValidationState.Invalid)
                    .Select(m =>
                    {
                        var sb = new StringBuilder();
                        sb.AppendFormat("{0}:", m.Key);
                        sb.Append(m.Value.Errors.Select(n => n.ErrorMessage).Aggregate((x, y) => x + ";" + y));
                        return sb.ToString();
                    })
                    .Aggregate((x, y) => x + "|" + y);

                context.Result = new JsonResult(ResultModel.Failed(errors));
            }
            catch
            {
                context.Result = new StatusCodeResult(StatusCodes.Status500InternalServerError);
            }
        }
    }

19 View Source File : QueryableSqlBuilder.cs
License : MIT License
Project Creator : 17MKH

public string BuildUpdateSql(IQueryParameters parameters)
    {
        var tableName = _queryBody.Joins.First().TableName;
        Check.NotNull(tableName, nameof(tableName), "未指定更新表");

        var sqlBuilder = new StringBuilder();

        //更新语句优先
        var updateSql = _queryBody.Update.Sql.NotNull() ? _queryBody.Update.Sql : ExpressionResolver.Resolve(_queryBody, _queryBody.Update.Lambda, parameters);
        Check.NotNull(updateSql, nameof(updateSql), "生成更新sql异常");

        sqlBuilder.AppendFormat("UPDATE {0} SET ", _dbAdapter.AppendQuote(tableName));
        sqlBuilder.Append(updateSql);

        SetUpdateInfo(sqlBuilder, parameters);

        var whereSql = ExpressionResolver.ResolveWhere(_queryBody, parameters);
        Check.NotNull(whereSql, nameof(whereSql), "批量更新必须指定条件,防止人为失误误操作");
        sqlBuilder.AppendFormat(" {0};", whereSql);

        return sqlBuilder.ToString();
    }

19 View Source File : ExpressionResolver.cs
License : MIT License
Project Creator : 17MKH

public static void ResolveWhere(QueryBody queryBody, StringBuilder sqlBuilder, IQueryParameters parameters)
    {
        sqlBuilder.Append("WHERE ");
        //记录下当前sqlBuilder的长度,用于解析完成后比对
        var length = sqlBuilder.Length;

        //解析where条件
        if (queryBody.Wheres.NotNullAndEmpty())
        {
            foreach (var w in queryBody.Wheres)
            {
                switch (w.Mode)
                {
                    case QueryWhereMode.Lambda:
                        Resolve(queryBody, w.Lambda.Body, w.Lambda, sqlBuilder, parameters);
                        break;
                    case QueryWhereMode.SubQuery:
                        Resolve(queryBody, w.SubQueryColumn.Body, w.SubQueryColumn, sqlBuilder, parameters);
                        var subSql = w.SubQueryable.ToListSql(parameters);
                        sqlBuilder.AppendFormat("{0} ({1})", w.SubQueryOperator, subSql);
                        break;
                    case QueryWhereMode.Sql:
                        sqlBuilder.AppendFormat("({0})", w.Sql);
                        break;
                }

                //通过比对长度判断是否有附加有效条件
                if (length != sqlBuilder.Length)
                    sqlBuilder.Append(" AND ");
            }
        }

        //解析软删除
        ResolveWhereForSoftDelete(queryBody, sqlBuilder);

        //解析租户
        ResolveWhereForTenant(queryBody, sqlBuilder);

        /*
         * 1、当没有过滤条件时,需要移除WHERE关键字,此时sqlBuilder是以"WHERE "结尾,只需删除最后面的6位即可
         * 2、当有过滤条件时,需要移除最后面的AND关键字,此时sqlBuilder是以" AND "结尾,也是只需删除最后面的5位即可
         */
        var removeLength = length == sqlBuilder.Length ? 6 : 5;
        sqlBuilder.Remove(sqlBuilder.Length - removeLength, removeLength);
    }

19 View Source File : ExpressionResolver.cs
License : MIT License
Project Creator : 17MKH

private static void ResolveWhereForSoftDelete(QueryBody queryBody, StringBuilder sqlBuilder)
    {
        //未开启软删除过滤
        if (!queryBody.FilterDeleted)
            return;

        var dbAdapter = queryBody.DbAdapter;

        //单表
        if (queryBody.Joins.Count < 2)
        {
            var first = queryBody.Joins.First();
            if (!first.EnreplacedyDescriptor.IsSoftDelete)
                return;

            sqlBuilder.AppendFormat("{0} = {1} AND ", dbAdapter.AppendQuote(first.EnreplacedyDescriptor.GetDeletedColumnName()), dbAdapter.BooleanFalseValue);

            return;
        }

        //多表
        foreach (var join in queryBody.Joins)
        {
            if (!join.EnreplacedyDescriptor.IsSoftDelete || join.Type == JoinType.Inner)
                return;

            sqlBuilder.AppendFormat("{0}.{1} = {2} AND ", join.Alias, dbAdapter.AppendQuote(join.EnreplacedyDescriptor.GetDeletedColumnName()), dbAdapter.BooleanFalseValue);
        }
    }

19 View Source File : ExpressionResolver.cs
License : MIT License
Project Creator : 17MKH

private static void ResolveWhereForTenant(QueryBody queryBody, StringBuilder sqlBuilder)
    {
        //未开启过滤租户
        if (!queryBody.FilterTenant)
            return;

        var dbAdapter = queryBody.DbAdapter;
        var tenantId = queryBody.Repository.DbContext.AccountResolver.TenantId;
        //单表
        if (queryBody.Joins.Count < 2)
        {
            var first = queryBody.Joins.First();
            if (!first.EnreplacedyDescriptor.IsTenant)
                return;

            //单表
            var x0 = dbAdapter.AppendQuote(DbConstants.TENANT_COLUMN_NAME);
            if (tenantId == null)
            {
                sqlBuilder.AppendFormat("{0} IS NULL AND ", x0);
            }
            else
            {
                sqlBuilder.AppendFormat("{0} = '{1}' AND ", x0, tenantId);
            }

            return;
        }

        //多表
        foreach (var join in queryBody.Joins)
        {
            if (!join.EnreplacedyDescriptor.IsTenant || join.Type == JoinType.Inner)
                return;

            //多表时附加别名
            var x0 = join.Alias;
            var x1 = dbAdapter.AppendQuote(DbConstants.TENANT_COLUMN_NAME);
            if (tenantId == null)
            {
                sqlBuilder.AppendFormat("{0}.{1} IS NULL AND ", x0, x1);
            }
            else
            {
                sqlBuilder.AppendFormat("{0}.{1} = '{2}' AND", x0, x1, tenantId);
            }
        }
    }

19 View Source File : CrudSqlBuilder.cs
License : MIT License
Project Creator : 17MKH

private void BuildSoftDeleteSql()
    {
        if (!_descriptor.IsSoftDelete)
            return;

        var dbAdapter = _descriptor.DbContext.Adapter;
        var sb = new StringBuilder("UPDATE {0} SET ");
        sb.AppendFormat("{0}={1},", dbAdapter.AppendQuote(_descriptor.GetDeletedColumnName()), dbAdapter.BooleanTrueValue);
        sb.AppendFormat("{0}={1},", dbAdapter.AppendQuote(_descriptor.GetDeletedTimeColumnName()), dbAdapter.AppendParameter("DeletedTime"));
        sb.AppendFormat("{0}={1} ", dbAdapter.AppendQuote(_descriptor.GetDeletedByColumnName()), dbAdapter.AppendParameter("DeletedBy"));

        _sql.SetSoftDelete(sb.ToString());

        var primaryKey = _descriptor.PrimaryKey;
        sb.AppendFormat(" WHERE {0}={1};", dbAdapter.AppendQuote(primaryKey.ColumnName), dbAdapter.AppendParameter(primaryKey.PropertyName));
        _sql.SetSoftDeleteSingle(sb.ToString());
    }

19 View Source File : CrudSqlBuilder.cs
License : MIT License
Project Creator : 17MKH

private void BuildUpdateSql()
    {
        var sb = new StringBuilder();
        sb.Append("UPDATE {0} SET");

        _sql.SetUpdate(sb.ToString());

        var dbAdapter = _descriptor.DbContext.Adapter;
        var primaryKey = _descriptor.PrimaryKey;
        if (!primaryKey.IsNo)
        {
            var columns = _descriptor.Columns.Where(m => !m.IsPrimaryKey);

            foreach (var col in columns)
            {
                sb.AppendFormat("{0}={1}", dbAdapter.AppendQuote(col.Name), dbAdapter.AppendParameter(col.PropertyName));

                //针对PostgreSQL数据库的json和jsonb类型字段的处理
                if (dbAdapter.Provider == DbProvider.PostgreSQL)
                {
                    if (col.TypeName.EqualsIgnoreCase("jsonb"))
                    {
                        sb.Append("::jsonb");
                    }
                    else if (col.TypeName.EqualsIgnoreCase("json"))
                    {
                        sb.Append("::json");
                    }
                }

                sb.Append(",");
            }

            sb.Remove(sb.Length - 1, 1);

            sb.AppendFormat(" WHERE {0}={1};", dbAdapter.AppendQuote(primaryKey.ColumnName), dbAdapter.AppendParameter(primaryKey.PropertyName));

            _sql.SetUpdateSingle(sb.ToString());
        }
    }

19 View Source File : CrudSqlBuilder.cs
License : MIT License
Project Creator : 17MKH

private void BuildQuerySql()
    {
        var dbAdapter = _descriptor.DbContext.Adapter;
        var sb = new StringBuilder("SELECT ");
        for (var i = 0; i < _descriptor.Columns.Count; i++)
        {
            var col = _descriptor.Columns[i];
            sb.AppendFormat("{0} AS {1}", dbAdapter.AppendQuote(col.Name), dbAdapter.AppendQuote(col.PropertyName));

            if (i != _descriptor.Columns.Count - 1)
            {
                sb.Append(",");
            }
        }
        sb.Append(" FROM {0} ");

        var querySql = sb.ToString();
        var getSql = querySql;
        var getAndRowLockSql = querySql;
        var getAndNoLockSql = querySql;
        // SqlServer行锁
        if (dbAdapter.Provider == DbProvider.SqlServer)
        {
            getAndRowLockSql += " WITH (ROWLOCK, UPDLOCK) ";
            getAndNoLockSql += "WITH (NOLOCK) ";
        }

        var primaryKey = _descriptor.PrimaryKey;
        if (!primaryKey.IsNo)
        {
            var appendSql = $" WHERE {dbAdapter.AppendQuote(primaryKey.ColumnName)}={dbAdapter.AppendParameter(primaryKey.PropertyName)} ";
            getSql += appendSql;
            getAndRowLockSql += appendSql;
            getAndNoLockSql += appendSql;

            //过滤软删除
            if (_descriptor.IsSoftDelete)
            {
                appendSql = $" AND {dbAdapter.AppendQuote(_descriptor.GetDeletedColumnName())}={dbAdapter.BooleanFalseValue} ";
                getSql += appendSql;
                getAndRowLockSql += appendSql;
                getAndNoLockSql += appendSql;
            }

            //MySql和PostgreSQL行锁
            if (dbAdapter.Provider == DbProvider.MySql || dbAdapter.Provider == DbProvider.PostgreSQL)
            {
                getAndRowLockSql += " FOR UPDATE;";
            }
        }

        _sql.SetGet(getSql);
        _sql.SetGetAndRowLock(getAndRowLockSql);
        _sql.SetGetAndNoLock(getAndNoLockSql);
    }

19 View Source File : GroupBySqlBuilder.cs
License : MIT License
Project Creator : 17MKH

public void ResolveSelect(StringBuilder sqlBuilder)
        {
            var select = _queryBody.Select;
            if (select == null)
                throw new ArgumentException("未指定查询信息");

            if (select.Mode == QuerySelectMode.Sql)
            {
                //SQL语句
                sqlBuilder.Append(select.Sql);
            }
            else if (select.Mode == QuerySelectMode.Lambda)
            {
                //表达式
                var exp = select.Include.Body;
                if (exp.NodeType != ExpressionType.New)
                {
                    throw new ArgumentException("分组查询的列,必须使用匿名对象的方式");
                }

                var newExp = exp as NewExpression;
                for (var i = 0; i < newExp.Arguments.Count; i++)
                {
                    var arg = newExp.Arguments[i];
                    var alias = newExp.Members![i].Name;
                    string columnName;

                    switch (arg.NodeType)
                    {
                        case ExpressionType.MemberAccess:
                            var memExp = arg as MemberExpression;
                            columnName = GetColumnName(memExp);
                            sqlBuilder.AppendFormat("{0} AS {1},", columnName, _dbAdapter.AppendQuote(alias));
                            break;
                        case ExpressionType.Call:
                            if (arg is MethodCallExpression callExp)
                            {
                                var methodName = callExp.Method.Name;
                                switch (callExp.Object!.NodeType)
                                {
                                    case ExpressionType.Parameter:
                                        if (callExp.Arguments.Count > 0)
                                        {
                                            //m => m.Sum(x => x.Id)
                                            var s = (callExp.Arguments[0] as UnaryExpression)!.Operand as LambdaExpression;
                                            var memberExp = s.Body as MemberExpression;
                                            columnName = _queryBody.GetColumnName(memberExp);
                                            sqlBuilder.AppendFormat("{0} AS {1},", _dbAdapter.FunctionMapper(callExp.Method.Name, columnName, callExp.Object!.Type), _dbAdapter.AppendQuote(alias));
                                        }
                                        else
                                        {
                                            sqlBuilder.AppendFormat("{0} AS {1},", _dbAdapter.FunctionMapper(methodName, null), _dbAdapter.AppendQuote(alias));
                                        }
                                        break;
                                    case ExpressionType.MemberAccess:
                                        //m => m.Key.replacedle.Substring(3)
                                        columnName = GetColumnName(callExp!.Object as MemberExpression);
                                        var args = ExpressionResolver.Arguments2Object(callExp.Arguments);
                                        sqlBuilder.AppendFormat("{0} AS {1},", _dbAdapter.FunctionMapper(methodName, columnName, callExp.Object.Type, args), _dbAdapter.AppendQuote(alias));
                                        break;
                                    default:
                                        sqlBuilder.AppendFormat("{0} AS {1},", _dbAdapter.FunctionMapper(methodName, null), _dbAdapter.AppendQuote(alias));
                                        break;
                                }
                            }
                            break;
                    }

19 View Source File : GroupBySqlBuilder.cs
License : MIT License
Project Creator : 17MKH

private void ResolveGroupBy(StringBuilder sqlBuilder)
        {
            if (_queryBody.GroupBy.Body.NodeType != ExpressionType.New)
            {
                throw new ArgumentException("分组表达式必须使用匿名函数方式");
            }

            var newExp = _queryBody.GroupBy.Body as NewExpression;

            sqlBuilder.Append(" GROUP BY");

            for (var i = 0; i < newExp!.Arguments.Count; i++)
            {
                var arg = newExp.Arguments[i];
                switch (arg.NodeType)
                {
                    case ExpressionType.MemberAccess:
                        var memExp = arg as MemberExpression;
                        if (memExp!.Expression.Type.IsString())
                        {
                            //字符串的Length属性
                            var columnName = _queryBody.GetColumnName(memExp.Expression);
                            sqlBuilder.AppendFormat(" {0},", _queryBody.DbAdapter.FunctionMapper(memExp.Member.Name, columnName));
                        }
                        else if (DbConstants.ENreplacedY_INTERFACE_TYPE.IsImplementType(memExp.Expression.Type))
                        {
                            //解析列信息,如:m.T1.Id
                            var columnName = _queryBody.GetColumnName(memExp);
                            sqlBuilder.AppendFormat(" {0},", columnName);
                        }
                        break;
                    case ExpressionType.Call:
                        if (arg is MethodCallExpression callExp)
                        {
                            var columnName = _queryBody.GetColumnName(callExp!.Object);
                            var args = ExpressionResolver.Arguments2Object(callExp.Arguments);
                            sqlBuilder.AppendFormat(" {0},", _dbAdapter.FunctionMapper(callExp.Method.Name, columnName, callExp.Object!.Type, args));
                        }
                        break;
                }
            }

            //移除末尾的逗号
            if (sqlBuilder[^1] == ',')
            {
                sqlBuilder.Remove(sqlBuilder.Length - 1, 1);
            }
        }

19 View Source File : GroupBySqlBuilder.cs
License : MIT License
Project Creator : 17MKH

public void ResolveSort(StringBuilder sqlBuilder)
        {
            if (_queryBody.Sorts.IsNullOrEmpty())
                return;

            var startLength = sqlBuilder.Length;
            sqlBuilder.Append(" ORDER BY");

            foreach (var sort in _queryBody.Sorts)
            {
                if (sort.Mode == QuerySortMode.Lambda)
                {
                    ResolveSort(sqlBuilder, sort.Lambda.Body, sort.Type);
                }
                else
                {
                    sqlBuilder.AppendFormat(" {0} {1},", sort.Sql, sort.Type == SortType.Asc ? "ASC" : "DESC");
                }
            }

            if (startLength + 9 == sqlBuilder.Length)
            {
                sqlBuilder.Remove(sqlBuilder.Length - 9, 9);
            }
            else if (startLength + 9 < sqlBuilder.Length)
            {
                sqlBuilder.Remove(sqlBuilder.Length - 1, 1);
            }
        }

19 View Source File : Helper.cs
License : MIT License
Project Creator : 5minlab

public void Append<T>(string key, replacedignableType<T> value) {
            if (value.Flag) {
                sb.AppendFormat("{0}={1}, ", key, value);
            };
        }

19 View Source File : Modifier_AndroidSdkVersion.cs
License : MIT License
Project Creator : 5minlab

public string GetConfigText() {
            var sb = new StringBuilder();
            sb.AppendFormat("min={0}, ", min);
            sb.AppendFormat("target={0}", target);
            return sb.ToString();
        }

19 View Source File : Modifier_DefineSymbol.cs
License : MIT License
Project Creator : 5minlab

public string GetConfigText() {
            var sb = new StringBuilder();
            sb.AppendFormat("target={0}, ", targetGroup);
            sb.AppendFormat("defines={0}", defines);
            return sb.ToString();
        }

19 View Source File : Modifier_XR.cs
License : MIT License
Project Creator : 5minlab

public string GetConfigText() {
            var sb = new StringBuilder();
            sb.AppendFormat("enabled={0}, ", enabled);
            sb.AppendFormat("devices={0}, ", string.Join(",", devices));
            sb.AppendFormat("stereoRenderingPath={0}", stereoRenderingPath);
            return sb.ToString();
        }

19 View Source File : PlayerBuildExecutor.cs
License : MIT License
Project Creator : 5minlab

internal string GetConfigText() {
            var sb = new StringBuilder();
            sb.AppendFormat("buildTarget={0}, ", Target);
            sb.AppendFormat("buildTargetGroup={0}, ", TargetGroup);
            sb.AppendFormat("options={0}, ", Options);
            sb.AppendFormat("scenes={0}", string.Join(",", scenes));
            return sb.ToString();
        }

19 View Source File : ClassStruct.cs
License : MIT License
Project Creator : 91Act

public static void ReadClreplacedStruct(StringBuilder sb, List<ClreplacedMember> members, EndianBinaryReader a_Stream)
        {
            for (int i = 0; i < members.Count; i++)
            {
                var member = members[i];
                var level = member.Level;
                var varTypeStr = member.Type;
                var varNameStr = member.Name;
                object value = null;
                var align = (member.Flag & 0x4000) != 0;
                var append = true;
                if (member.alignBefore)
                    a_Stream.AlignStream(4);
                if (varTypeStr == "SInt8")//sbyte
                {
                    value = a_Stream.ReadSByte();
                }
                else if (varTypeStr == "UInt8")//byte
                {
                    value = a_Stream.ReadByte();
                }
                else if (varTypeStr == "short" || varTypeStr == "SInt16")//Int16
                {
                    value = a_Stream.ReadInt16();
                }
                else if (varTypeStr == "UInt16" || varTypeStr == "unsigned short")//UInt16
                {
                    value = a_Stream.ReadUInt16();
                }
                else if (varTypeStr == "int" || varTypeStr == "SInt32")//Int32
                {
                    value = a_Stream.ReadInt32();
                }
                else if (varTypeStr == "UInt32" || varTypeStr == "unsigned int" || varTypeStr == "Type*")//UInt32
                {
                    value = a_Stream.ReadUInt32();
                }
                else if (varTypeStr == "long long" || varTypeStr == "SInt64")//Int64
                {
                    value = a_Stream.ReadInt64();
                }
                else if (varTypeStr == "UInt64" || varTypeStr == "unsigned long long")//UInt64
                {
                    value = a_Stream.ReadUInt64();
                }
                else if (varTypeStr == "float")//float
                {
                    value = a_Stream.ReadSingle();
                }
                else if (varTypeStr == "double")//double
                {
                    value = a_Stream.ReadDouble();
                }
                else if (varTypeStr == "bool")//bool
                {
                    value = a_Stream.ReadBoolean();
                }
                else if (varTypeStr == "string")//string
                {
                    append = false;
                    var str = a_Stream.ReadAlignedString(a_Stream.ReadInt32());
                    sb.AppendFormat("{0}{1} {2} = \"{3}\"\r\n", (new string('\t', level)), varTypeStr, varNameStr, str);
                    i += 3;//skip
                }
                else if (varTypeStr == "Array")//Array
                {
                    append = false;
                    if ((members[i - 1].Flag & 0x4000) != 0)
                        align = true;
                    sb.AppendFormat("{0}{1} {2}\r\n", (new string('\t', level)), varTypeStr, varNameStr);
                    var size = a_Stream.ReadInt32();
                    sb.AppendFormat("{0}{1} {2} = {3}\r\n", (new string('\t', level)), "int", "size", size);
                    var array = ReadArray(members, level, i);
                    for (int j = 0; j < size; j++)
                    {
                        sb.AppendFormat("{0}[{1}]\r\n", (new string('\t', level + 1)), j);
                        ReadClreplacedStruct(sb, array, a_Stream);
                    }
                    i += array.Count + 1;//skip
                }
                else if (varTypeStr == "TypelessData")
                {
                    append = false;
                    var size = a_Stream.ReadInt32();
                    a_Stream.ReadBytes(size);
                    i += 2;
                    sb.AppendFormat("{0}{1} {2}\r\n", (new string('\t', level)), varTypeStr, varNameStr);
                    sb.AppendFormat("{0}{1} {2} = {3}\r\n", (new string('\t', level)), "int", "size", size);
                }
                else
                {
                    append = false;
                    if (align)
                    {
                        align = false;
                        SetAlignBefore(members, level, i + 1);
                    }
                    sb.AppendFormat("{0}{1} {2}\r\n", (new string('\t', level)), varTypeStr, varNameStr);
                }
                if (append)
                    sb.AppendFormat("{0}{1} {2} = {3}\r\n", (new string('\t', level)), varTypeStr, varNameStr, value);
                if (align)
                    a_Stream.AlignStream(4);
            }
        }

19 View Source File : HighlightingColor.cs
License : MIT License
Project Creator : Abdesol

[System.Diagnostics.Codereplacedysis.SuppressMessage("Microsoft.Globalization", "CA1308:NormalizeStringsToUppercase", Justification = "CSS usually uses lowercase, and all possible values are English-only")]
		public virtual string ToCss()
		{
			StringBuilder b = new StringBuilder();
			if (Foreground != null) {
				Color? c = Foreground.GetColor(null);
				if (c != null) {
					b.AppendFormat(CultureInfo.InvariantCulture, "color: #{0:x2}{1:x2}{2:x2}; ", c.Value.R, c.Value.G, c.Value.B);
				}
			}
			if (FontWeight != null) {
				b.Append("font-weight: ");
				b.Append(FontWeight.Value.ToString().ToLowerInvariant());
				b.Append("; ");
			}
			if (FontStyle != null) {
				b.Append("font-style: ");
				b.Append(FontStyle.Value.ToString().ToLowerInvariant());
				b.Append("; ");
			}
			if (Underline != null) {
				b.Append("text-decoration: ");
				b.Append(Underline.Value ? "underline" : "none");
				b.Append("; ");
			}
			if (Strikethrough != null) {
				if (Underline == null)
					b.Append("text-decoration:  ");

				b.Remove(b.Length - 1, 1);
				b.Append(Strikethrough.Value ? " line-through" : " none");
				b.Append("; ");
			}
			return b.ToString();
		}

19 View Source File : OVRHandTest.cs
License : MIT License
Project Creator : absurd-joy

void Update()
	{
		data.Length = 0;

		OVRInput.Controller activeController = OVRInput.GetActiveController();

		string activeControllerName = activeController.ToString();
		data.AppendFormat("Active: {0}\n", activeControllerName);

		string connectedControllerNames = OVRInput.GetConnectedControllers().ToString();
		data.AppendFormat("Connected: {0}\n", connectedControllerNames);

		data.AppendFormat("PrevConnected: {0}\n", prevConnected);

		controllers.Update();
		controllers.AppendToStringBuilder(ref data);
		prevConnected = connectedControllerNames;

		Vector3 pos = OVRInput.GetLocalControllerPosition(activeController);
		data.AppendFormat("Position: ({0:F2}, {1:F2}, {2:F2})\n", pos.x, pos.y, pos.z);

		Quaternion rot = OVRInput.GetLocalControllerRotation(activeController);
		data.AppendFormat("Orientation: ({0:F2}, {1:F2}, {2:F2}, {3:F2})\n", rot.x, rot.y, rot.z, rot.w);

		data.AppendFormat("HandTrackingEnabled: {0}\n", OVRPlugin.GetHandTrackingEnabled());

		bool result_hs_LH = OVRPlugin.GetHandState(OVRPlugin.Step.Render, OVRPlugin.Hand.HandLeft, ref hs_LH);
		data.AppendFormat("LH HS Query Res: {0}\n", result_hs_LH);
		data.AppendFormat("LH HS Status: {0}\n", hs_LH.Status);
		data.AppendFormat("LH HS Pose: {0}\n", hs_LH.RootPose);
		data.AppendFormat("LH HS HandConf: {0}\n", hs_LH.HandConfidence);

		bool result_hs_RH = OVRPlugin.GetHandState(OVRPlugin.Step.Render, OVRPlugin.Hand.HandRight, ref hs_RH);
		data.AppendFormat("RH HS Query Res: {0}\n", result_hs_RH);
		data.AppendFormat("RH HS Status: {0}\n", hs_RH.Status);
		data.AppendFormat("RH HS Pose: {0}\n", hs_RH.RootPose);
		data.AppendFormat("RH HS HandConf: {0}\n", hs_RH.HandConfidence);

		data.AppendFormat("LH Skel Query Res: {0}\n", result_skel_LH);
		data.AppendFormat("LH Skel Type: {0}\n", skel_LH.Type);
		data.AppendFormat("LH Skel NumBones: {0}\n", skel_LH.NumBones);

		data.AppendFormat("RH Skel Query Res: {0}\n", result_skel_RH);
		data.AppendFormat("RH Skel Type: {0}\n", skel_RH.Type);
		data.AppendFormat("RH Skel NumBones: {0}\n", skel_RH.NumBones);

		data.AppendFormat("LH Mesh Query Res: {0}\n", result_mesh_LH);
		data.AppendFormat("LH Mesh Type: {0}\n", mesh_LH.Type);
		data.AppendFormat("LH Mesh NumVers: {0}\n", mesh_LH.NumVertices);

		data.AppendFormat("RH Mesh Query Res: {0}\n", result_mesh_RH);
		data.AppendFormat("RH Mesh Type: {0}\n", mesh_RH.Type);
		data.AppendFormat("RH Mesh NumVers: {0}\n", mesh_RH.NumVertices);

		for (int i = 0; i < monitors.Count; i++)
		{
			monitors[i].Update();
			monitors[i].AppendToStringBuilder(ref data);
		}

		if (uiText != null)
		{
			uiText.text = data.ToString();
		}
	}

19 View Source File : OVRControllerTest.cs
License : MIT License
Project Creator : absurd-joy

void Update()
	{
		OVRInput.Controller activeController = OVRInput.GetActiveController();

		data.Length = 0;
		byte battery = OVRInput.GetControllerBatteryPercentRemaining();
		data.AppendFormat("Battery: {0}\n", battery);

		float framerate = OVRPlugin.GetAppFramerate();
		data.AppendFormat("Framerate: {0:F2}\n", framerate);

		string activeControllerName = activeController.ToString();
		data.AppendFormat("Active: {0}\n", activeControllerName);

		string connectedControllerNames = OVRInput.GetConnectedControllers().ToString();
		data.AppendFormat("Connected: {0}\n", connectedControllerNames);

		data.AppendFormat("PrevConnected: {0}\n", prevConnected);

		controllers.Update();
		controllers.AppendToStringBuilder(ref data);

		prevConnected = connectedControllerNames;

		Quaternion rot = OVRInput.GetLocalControllerRotation(activeController);
		data.AppendFormat("Orientation: ({0:F2}, {1:F2}, {2:F2}, {3:F2})\n", rot.x, rot.y, rot.z, rot.w);

		Vector3 angVel = OVRInput.GetLocalControllerAngularVelocity(activeController);
		data.AppendFormat("AngVel: ({0:F2}, {1:F2}, {2:F2})\n", angVel.x, angVel.y, angVel.z);

		Vector3 angAcc = OVRInput.GetLocalControllerAngularAcceleration(activeController);
		data.AppendFormat("AngAcc: ({0:F2}, {1:F2}, {2:F2})\n", angAcc.x, angAcc.y, angAcc.z);

		Vector3 pos = OVRInput.GetLocalControllerPosition(activeController);
		data.AppendFormat("Position: ({0:F2}, {1:F2}, {2:F2})\n", pos.x, pos.y, pos.z);

		Vector3 vel = OVRInput.GetLocalControllerVelocity(activeController);
		data.AppendFormat("Vel: ({0:F2}, {1:F2}, {2:F2})\n", vel.x, vel.y, vel.z);

		Vector3 acc = OVRInput.GetLocalControllerAcceleration(activeController);
		data.AppendFormat("Acc: ({0:F2}, {1:F2}, {2:F2})\n", acc.x, acc.y, acc.z);

		float indexTrigger = OVRInput.Get(OVRInput.Axis1D.PrimaryIndexTrigger);
		data.AppendFormat("PrimaryIndexTriggerAxis1D: ({0:F2})\n", indexTrigger);

		float handTrigger = OVRInput.Get(OVRInput.Axis1D.PrimaryHandTrigger);
		data.AppendFormat("PrimaryHandTriggerAxis1D: ({0:F2})\n", handTrigger);

		for (int i = 0; i < monitors.Count; i++)
		{
			monitors[i].Update();
			monitors[i].AppendToStringBuilder(ref data);
		}

		if (uiText != null)
		{
			uiText.text = data.ToString();
		}
	}

19 View Source File : LanguageCompiler.cs
License : MIT License
Project Creator : ABTSoftware

private static void CompileRule(LanguageRule languageRule,
                                                 StringBuilder regex,
                                                 ICollection<string> captures,
                                                 bool isFirstRule)
        {
            if (!isFirstRule)
            {
                regex.AppendLine();
                regex.AppendLine();
                regex.AppendLine("|");
                regex.AppendLine();
            }
            
            regex.AppendFormat("(?-xis)(?m)({0})(?x)", languageRule.Regex);

            int numberOfCaptures = GetNumberOfCaptures(languageRule.Regex);

            for (int i = 0; i <= numberOfCaptures; i++)
            {
                string scope = null;

                foreach (int captureIndex in languageRule.Captures.Keys)
                {
                    if (i == captureIndex)
                    {
                        scope = languageRule.Captures[captureIndex];
                        break;
                    }
                }

                captures.Add(scope);
            }
        }

19 View Source File : CreateInvertedIndex.cs
License : MIT License
Project Creator : ABTSoftware

private static string GetTextFromExample(Example example)
        {
            var sb = new StringBuilder();

            sb.AppendFormat("{0} ", example.replacedle);
            sb.AppendFormat("{0} ", example.Group);
            example.Features.ForEach(feature => sb.AppendFormat("{0} ", feature));
            sb.AppendFormat("{0} ", example.Description);

            return sb.ToString();
        }

19 View Source File : MainControl.xaml.cs
License : MIT License
Project Creator : Actipro

private void OnDockSiteMenuOpening(object sender, DockingMenuEventArgs e) {
			var sb = new StringBuilder(String.Format("WindowContextMenu: Kind={0}", e.Kind));

			if (e.Window != null) {
				sb.AppendFormat(", replacedle={0} ", e.Window.replacedle);

				if (e.Window == outputToolWindow) {
					e.Menu.Items.Add(new Separator());

					var menuItem = new MenuItem() { Header = "Location/Size Events", IsCheckable = true };
					menuItem.BindToProperty(MenuItem.IsCheckedProperty, this, "IsLocationSizeEventOutputEnabled", BindingMode.TwoWay);
					e.Menu.Items.Add(menuItem);
				}
			}

			this.AppendMessage(sb.ToString());
		}

19 View Source File : MainControl.xaml.cs
License : MIT License
Project Creator : Actipro

private void OnDockSiteMenuOpening(object sender, DockingMenuEventArgs e) {
			var sb = new StringBuilder(String.Format("WindowContextMenu: Kind={0}", e.Kind));

			if (e.Window != null) {
				sb.AppendFormat(", replacedle={0} ", e.Window.replacedle);

				if (e.Window == outputToolWindow) {
					e.Menu.Items.Add(new Separator());

					var menuItem = new MenuItem() { Header = "Activation Events", IsCheckable = true };
					menuItem.BindToProperty(MenuItem.IsCheckedProperty, this, "IsWindowActivationEventOutputEnabled", BindingMode.TwoWay);
					e.Menu.Items.Add(menuItem);

					menuItem = new MenuItem() { Header = "Registration Events", IsCheckable = true };
					menuItem.BindToProperty(MenuItem.IsCheckedProperty, this, "IsWindowRegistrationEventOutputEnabled", BindingMode.TwoWay);
					e.Menu.Items.Add(menuItem);
				}
			}

			this.AppendMessage(sb.ToString());
		}

19 View Source File : MainControl.xaml.cs
License : MIT License
Project Creator : Actipro

private void OnDockSiteMenuOpening(object sender, DockingMenuEventArgs e) {
			var sb = new StringBuilder(String.Format("WindowContextMenu: Kind={0}", e.Kind));

			if (e.Window != null) {
				sb.AppendFormat(", replacedle={0} ", e.Window.replacedle);

				if (e.Window == customizedDoreplacedentWindow) {
					e.Menu.Items.Add(new Separator());

					var menuItem = new MenuItem() { Header = "Custom Menu Item Added at " + DateTime.Now.ToShortTimeString() };
					e.Menu.Items.Add(menuItem);
				}
				else if (e.Window == customizedToolWindow) {
					e.Menu.Items.Clear();

					var menuItem = new MenuItem() { Header = "Custom Menu Item Added at " + DateTime.Now.ToShortTimeString() };
					e.Menu.Items.Add(menuItem);
				}
			}

			this.AppendMessage(sb.ToString());
		}

19 View Source File : MainControl.xaml.cs
License : MIT License
Project Creator : Actipro

private void UpdateHitTestInfo(IHitTestResult result) {
			StringBuilder text = new StringBuilder();

			if (result != null) {
				text.AppendFormat("Snapshot version {0}{1}", result.Snapshot.Version.Number, Environment.NewLine);

				if (result.View != null)
					text.AppendFormat("Over '{0}' view{1}", this.GetPlacementName(result.View), Environment.NewLine);

				switch (result.Type) {
					case HitTestResultType.Splitter: {
						EditorViewSplitter splitter = result.VisualElement as EditorViewSplitter;
						if (splitter != null)
							text.AppendLine("Over view splitter");
						break;
					}
					case HitTestResultType.ViewMargin:
						text.AppendFormat("Over '{0}' margin{1}", result.ViewMargin.Key, Environment.NewLine);
						text.AppendFormat("Closest text position is ({0},{1}){2}", result.Position.Line, result.Position.Character, Environment.NewLine);
						break;
					case HitTestResultType.ViewScrollBar: {
						System.Windows.Controls.Primitives.ScrollBar scrollBar = result.VisualElement as System.Windows.Controls.Primitives.ScrollBar;
						if (scrollBar != null)
							text.AppendFormat("Over '{0}' scrollbar{1}", scrollBar.Orientation, Environment.NewLine);
						break;
					}
					case HitTestResultType.ViewScrollBarBlock:
						text.AppendLine("Over scroll bar block");
						break;
					case HitTestResultType.ViewScrollBarSplitter: {
						ScrollBarSplitter splitter = result.VisualElement as ScrollBarSplitter;
						if (splitter != null)
							text.AppendLine("Over scroll bar splitter");
						break;
					}
					case HitTestResultType.ViewScrollBarTray:
						text.AppendLine("Over scroll bar tray (that can contain other controls like buttons)");
						break;
					case HitTestResultType.ViewTextArea:
						text.AppendFormat("Not directly over any view line or character{0}", Environment.NewLine);
						text.AppendFormat("Closest text position is ({0},{1}){2}", result.Position.Line, result.Position.Character, Environment.NewLine);
						break;
					case HitTestResultType.ViewTextAreaOverCharacter: {
						ITextSnapshotReader reader = result.GetReader();
						text.AppendFormat("Directly over offset {0} and text position ({1},{2}){3}", result.Offset, result.Position.Line, result.Position.Character, Environment.NewLine);
						text.AppendFormat("Directly over character '{0}'{1}", reader.Character, Environment.NewLine);
						
						IToken token = reader.Token;
						if (token != null) {
							text.AppendFormat("Directly over token '{0}' with range ({1},{2})-({3},{4}){5}", token.Key, 
								token.StartPosition.Line, token.StartPosition.Character, 
								token.EndPosition.Line, token.EndPosition.Character, Environment.NewLine);
							text.AppendFormat("Directly over token text '{0}'{1}", reader.TokenText, Environment.NewLine);
						}
						break;
					}
					case HitTestResultType.ViewTextAreaOverIntraTextSpacer:
						text.AppendFormat("Over spacer '{0}' on doreplacedent line {1}{2}", result.IntraTextSpacerTag, result.Position.Line, Environment.NewLine);
						break;
					case HitTestResultType.ViewTextAreaOverLine:
						text.AppendFormat("Over whitespace at the end of doreplacedent line {0}{1}", result.Position.Line, Environment.NewLine);
						break;
					default:
						if (result.VisualElement != null)
							text.AppendFormat("Over a '{0}' element{1}", result.VisualElement.GetType().FullName, Environment.NewLine);
						else
							text.AppendLine("No other hit test details available");
						break;
				}
			}
			else {
				text.AppendLine("Not over the SyntaxEditor");
			}

			resultsTextBox.Text = text.ToString();
		}

19 View Source File : FunctionContentProvider.cs
License : MIT License
Project Creator : Actipro

public object GetContent() {
			var htmlSnippet = new StringBuilder();
			
			if (includeImage) {
				// Append icon
				htmlSnippet.Append("<img src=\"resource:");
				htmlSnippet.Append(HtmlContentProvider.Escape(CommonImageKind.MethodPublic.ToString()));
				htmlSnippet.Append("\" align=\"absbottom\" /> ");
			}
				
			// Append function name
			htmlSnippet.Append("<span style=\"color: " + HtmlContentProvider.GetKeywordForegroundColor(highlightingStyleRegistry).ToWebColor() + ";\">function</span> ");
			htmlSnippet.Append(HtmlContentProvider.Escape(functionDecl.Name));

			// Append parameters
			htmlSnippet.Append("(");
			for (int index = 0; index < functionDecl.Parameters.Count; index++) {
				if (index > 0)
					htmlSnippet.Append(", ");

				if (index == parameterIndex)
					htmlSnippet.Append("<b>");
				htmlSnippet.Append(functionDecl.Parameters[index]);
				if (index == parameterIndex)
					htmlSnippet.Append("</b>");
			}
			htmlSnippet.Append(")");

			// Append description
			htmlSnippet.AppendFormat("<br/><span style=\"color: " + HtmlContentProvider.GetCommentForegroundColor(highlightingStyleRegistry).ToWebColor() + ";\">This function has {0} parameter{1}.</span>", 
				functionDecl.Parameters.Count, (functionDecl.Parameters.Count == 1 ? String.Empty : "s"));

			return new HtmlContentProvider(htmlSnippet.ToString(), backgroundColorHint).GetContent();
		}

19 View Source File : DiagnosticVerifier.cs
License : GNU General Public License v3.0
Project Creator : Acumatica

private static string FormatDiagnostics(Diagnosticreplacedyzer replacedyzer, params Diagnostic[] diagnostics)
		{
			var builder = new StringBuilder();
			for (int i = 0; i < diagnostics.Length; ++i)
			{
				builder.AppendLine("// " + diagnostics[i].ToString());

				var replacedyzerType = replacedyzer.GetType();
				var rules = replacedyzer.SupportedDiagnostics;

				foreach (var rule in rules)
				{
					if (rule != null && rule.Id == diagnostics[i].Id)
					{
						var location = diagnostics[i].Location;
						if (location == Location.None)
						{
							builder.AppendFormat("GetGlobalResult({0}.{1})", replacedyzerType.Name, rule.Id);
						}
						else
						{
							replacedert.True(location.IsInSource,
								$"Test base does not currently handle diagnostics in metadata locations. Diagnostic in metadata: {diagnostics[i]}\r\n");

							string resultMethodName = diagnostics[i].Location.SourceTree.FilePath.EndsWith(".cs") ? "GetCSharpResultAt" : "GetBasicResultAt";
							var linePosition = diagnostics[i].Location.GetLineSpan().StartLinePosition;

							builder.AppendFormat("{0}({1}, {2}, {3}.{4})",
								resultMethodName,
								linePosition.Line + 1,
								linePosition.Character + 1,
								replacedyzerType.Name,
								rule.Id);
						}

						if (i != diagnostics.Length - 1)
						{
							builder.Append(',');
						}

						builder.AppendLine();
						break;
					}
				}
			}
			return builder.ToString();
		}

19 View Source File : QuoteFunctions.cs
License : MIT License
Project Creator : Adoxio

public static string GetQuoteInstructions(IEnumerable<LineItem> lineItems)
		{
			return lineItems.Aggregate(
				new StringBuilder(),
				(sb, lineItem) => lineItem.Instructions == null
					? sb
					: sb.AppendFormat("{0}: {1}\n\n", lineItem.Product.GetAttributeValue<string>("name"), lineItem.Instructions))
				.ToString();
		}

See More Examples