public override string ToSql() { if (Fields == null || !Fields.Any()) { return(string.Empty); } var sqlBuilder = new StringBuilder(); var insertableFields = GetInsertableFields(); // This should never happen if (insertableFields == null) { return(string.Empty); } insertableFields = insertableFields.Where(fld => !_unsupportedTypes.Contains(fld.ColumnDataType)); var parameterSign = EntityMapper.SqlGenerator.DriverParameterIndicator; var insertableFieldNames = insertableFields.Select(fld => fld.ColumnName); var valuesParameters = string.Format("{0}", string.Join(",", insertableFields.Select(i => parameterSign + i.ColumnName))); var formattedFields = SqlServerHelper.BraketFieldNames(insertableFieldNames); var autoIncrementField = EntityMapper.Entities[typeof(T)].Properties.Where(p => p.IsAutoIncrement).FirstOrDefault(); if (autoIncrementField != null) { sqlBuilder.Append(GenerateTempTableSql()); sqlBuilder.AppendFormat("INSERT INTO {0}[{1}].[{2}] ({3}) {4} ", EntityMapper.SqlGenerator.IncludeDbNameInQuery ? string.Format("[{0}].", DatabaseName) : "", SchemaName, TableName, string.Format("{0}", string.Join(",", formattedFields)), string.Format("OUTPUT {0} INTO {1}", GetAllFields(useInsertedPrefix: true), _tempTableName)); var valuesClause = "VALUES ({0}); {1};"; var returnEntity = string.Format("SELECT TOP 1 {0} FROM {1}", GetAllFields(), _tempTableName); sqlBuilder.AppendFormat(valuesClause, valuesParameters, returnEntity); } else { sqlBuilder.AppendFormat("INSERT INTO {0}[{1}].[{2}] ({3}) VALUES ({4});", EntityMapper.SqlGenerator.IncludeDbNameInQuery ? string.Format("[{0}].", DatabaseName) : "", SchemaName, TableName, string.Format("{0}", string.Join(",", formattedFields)), string.Format("{0}", string.Join(",", valuesParameters))); var query = new SqlServerSelectQuery <T>(); query = EntityStore.GetQueryByKey <T>(this.Entity, query) as SqlServerSelectQuery <T>; query.GetTopRows(1); Parameters.AddDynamicParams(query.Parameters); sqlBuilder.Append(query.ToSql()); } return(sqlBuilder.ToString()); }
/// <summary> /// Creates a filtered select statement /// </summary> /// <typeparam name="T">Enity type</typeparam> /// <param name="expression">Expression by which the enitity set is to be filtered</param> /// <returns></returns> public SelectQuery <T> Select <T>(Expression <Func <T, bool> > expression) { var select = new SqlServerSelectQuery <T>(); return(select.Where(expression) as SqlServerSelectQuery <T>); }