Пример #1
0
        public CommandTextEventInfo ConstructTakeSql <TKey, TEntity>(IList <Expression <Func <TEntity, object> > > logicFields, int take, IEnumerable <Expression <Func <TEntity, object> > > selectFields, WhereClauseResult whereClause, OrderbyClauseResult orderbyClause) where TKey : IEquatable <TKey> where TEntity : class, IEntity <TKey>
        {
            var writer     = new StringTextWriter();
            var dynParms   = new DynamicParameters();
            var entityType = typeof(TEntity);
            var tableName  = _dialectSettings.GetEscapeName(entityType);

            var tp = entityType.GetRuntimeProperties().Where(p => p.PropertyType.IsSimpleType());

            if (logicFields != null)
            {
                tp = tp.Where(p => !logicFields.Any(exp => string.Equals(p.Name, exp.GetMemberName(), StringComparison.Ordinal)));
            }
            if (selectFields != null)
            {
                tp = tp.Where(p => selectFields.Any(exp => string.Equals(p.Name, exp.GetMemberName(), StringComparison.Ordinal)));
            }

            writer.Write($"SELECT TOP({take}) {string.Join(", ", tp.Select(p => _dialectSettings.GetEscapeName(p)))} FROM {tableName} ");
            if (whereClause != null)
            {
                writer.Write($"WHERE ({whereClause}) ");
                dynParms.AdddWhereClause(whereClause);
            }
            if (!orderbyClause.IsNull)
            {
                writer.Write($"ORDER BY {orderbyClause} ");
            }
            writer.Write(";");

            return(new CommandTextEventInfo(writer.ToStringWithClear(), dynParms));
        }
Пример #2
0
        public CommandTextEventInfo ConstructCountSql <TKey, TEntity>(Expression <Func <TEntity, object> > member, WhereClauseResult whereClause) where TKey : IEquatable <TKey> where TEntity : class, IEntity <TKey>
        {
            var writer     = new StringTextWriter();
            var dynParms   = new DynamicParameters();
            var entityType = typeof(TEntity);
            var tableName  = _dialectSettings.GetEscapeName(entityType);

            writer.Write($"SELECT COUNT({(member == null ? "1" : _dialectSettings.GetEscapeName(member))}) AS _TotalNumberOfRecords FROM {tableName} ");
            if (whereClause != null)
            {
                writer.Write($"WHERE ({whereClause}) ");
                dynParms.AdddWhereClause(whereClause);
            }
            writer.Write(";");

            return(new CommandTextEventInfo(writer.ToStringWithClear(), dynParms));
        }
Пример #3
0
        public CommandTextEventInfo ConstructExistsSql(Type entityType, WhereClauseResult whereClause)
        {
            var writer    = new StringTextWriter();
            var dynParms  = new DynamicParameters();
            var tableName = _dialectSettings.GetEscapeName(entityType);

            writer.Write("SELECT ISNULL(");
            writer.Write("(");
            writer.Write($"SELECT TOP(1) 1 FROM {tableName}");
            if (whereClause != null)
            {
                writer.Write($"WHERE ({whereClause}) ");
                dynParms.AdddWhereClause(whereClause);
            }
            writer.Write("),0");
            writer.Write(") AS _ExistsFlag ;");

            return(new CommandTextEventInfo(writer.ToStringWithClear(), dynParms));
        }
Пример #4
0
        public CommandTextEventInfo ConstructUpdateSql <TKey, TEntity>(IList <Expression <Func <TEntity, object> > > logicFields, TEntity entityToUpdate, IEnumerable <Expression <Func <TEntity, object> > > updateFields, WhereClauseResult whereClause) where TKey : IEquatable <TKey> where TEntity : class, IEntity <TKey>
        {
            if (entityToUpdate == null)
            {
                throw new ArgumentNullException(nameof(entityToUpdate));
            }

            var writer     = new StringTextWriter();
            var dynParms   = new DynamicParameters();
            var entityType = typeof(TEntity);
            var tableName  = _dialectSettings.GetEscapeName(entityType);

            var tp = entityType.GetRuntimeProperties().Where(p => p.PropertyType.IsSimpleType());

            if (logicFields != null)
            {
                tp = tp.Where(p => !logicFields.Any(exp => string.Equals(p.Name, exp.GetMemberName(), StringComparison.Ordinal)));
            }
            if (updateFields != null)
            {
                tp = tp.Where(p => updateFields.Any(exp => string.Equals(p.Name, exp.GetMemberName(), StringComparison.Ordinal)));
            }

            var properties = tp.ToList();
            var kvps       = new List <KeyValuePair <string, string> >(properties.Count);

            foreach (var property in properties)
            {
                var paramName = _dialectSettings.GetParameterName(property);
                dynParms.Add(paramName, property.GetValue(entityToUpdate));
                kvps.Add(new KeyValuePair <string, string>(_dialectSettings.GetEscapeName(property), paramName));
            }

            writer.Write($"UPDATE {tableName} SET {string.Join(", ", kvps.Select(kvp => $"{kvp.Key} = {kvp.Value}"))} ");
            if (whereClause != null)
            {
                writer.Write($"WHERE ({whereClause}) ");
                dynParms.AdddWhereClause(whereClause);
            }
            writer.Write(";");

            return(new CommandTextEventInfo(writer.ToStringWithClear(), dynParms));
        }
Пример #5
0
        public CommandTextEventInfo ConstructDeleteSql(Type entityType, WhereClauseResult whereClause)
        {
            if (entityType == null)
            {
                throw new ArgumentNullException(nameof(entityType));
            }

            var writer    = new StringTextWriter();
            var dynParms  = new DynamicParameters();
            var tableName = _dialectSettings.GetEscapeName(entityType);

            writer.Write($"DELETE FROM {tableName} ");
            if (whereClause != null)
            {
                writer.Write($"WHERE ({whereClause}) ");
                dynParms.AdddWhereClause(whereClause);
            }
            writer.Write(";");

            return(new CommandTextEventInfo(writer.ToStringWithClear(), dynParms));
        }
Пример #6
0
        public CommandTextEventInfo ConstructPageSql <TKey, TEntity>(IList <Expression <Func <TEntity, object> > > logicFields, int skip, int take, IEnumerable <Expression <Func <TEntity, object> > > selectFields, WhereClauseResult whereClause, OrderbyClauseResult orderbyClause) where TKey : IEquatable <TKey> where TEntity : class, IEntity <TKey>
        {
            var writer     = new StringTextWriter();
            var dynParms   = new DynamicParameters();
            var entityType = typeof(TEntity);
            var tableName  = _dialectSettings.GetEscapeName(entityType);

            var tp = entityType.GetRuntimeProperties().Where(p => p.PropertyType.IsSimpleType());

            if (logicFields != null)
            {
                tp = tp.Where(p => !logicFields.Any(exp => string.Equals(p.Name, exp.GetMemberName(), StringComparison.Ordinal)));
            }
            if (selectFields != null)
            {
                tp = tp.Where(p => selectFields.Any(exp => string.Equals(p.Name, exp.GetMemberName(), StringComparison.Ordinal)));
            }

            // _TotalNumberOfRecords
            writer.Write($"SELECT COUNT(1) AS _TotalNumberOfRecords FROM {tableName} ");
            if (whereClause != null)
            {
                writer.Write($"WHERE ({whereClause})");
            }
            writer.Write("; ");
            // PagedResult
            var propeerties = tp.ToList();

            writer.Write($"SELECT {string.Join(", ", propeerties.Select(p => $"PagedResult.{_dialectSettings.GetEscapeName(p)}"))} FROM (");
            writer.Write($"SELECT TOP({skip + take}) ROW_NUMBER() OVER(ORDER BY {orderbyClause}) AS _PagedNumber, {string.Join(", ", propeerties.Select(p => _dialectSettings.GetEscapeName(p)))} FROM {tableName}");
            if (whereClause != null)
            {
                writer.Write($" WHERE ({whereClause})");
                dynParms.AdddWhereClause(whereClause);
            }
            writer.Write($") AS PagedResult WHERE (PagedResult._PagedNumber > {skip}) ");
            writer.Write(";");

            return(new CommandTextEventInfo(writer.ToStringWithClear(), dynParms));
        }