/// <summary> /// 通过operationType将实体对象转换成参数化的Sql语句 /// </summary> /// <typeparam name="T">实体类型</typeparam> /// <param name="operationType">数据库操作类型</param> /// <param name="entity">实体对象(INSERT,UPDATE时使用)</param> /// <param name="paramsStartIndex">参数化Sql开始的索引</param> /// <param name="dynamicParameters">参数列表(INSERT,UPDATE,DELETE,SELECT时使用)</param> /// <returns></returns> private string ToParameterizedSqlString <T>(DbOperationType operationType, T entity, int paramsStartIndex, ref DynamicParameters dynamicParameters) where T : class { Type t = typeof(T); MapperPropertyInfo[] mappers = SqlServerUtilities.GetMapperPropertyInfo <T>(entity); string[] fields = new string[0]; string[] parameterized = new string[0]; string sql = string.Empty; switch (operationType) { case DbOperationType.INSERT: parameterized = SqlServerUtilities.GetParameterized(mappers, paramsStartIndex, ref dynamicParameters, out fields); sql = string.Format("INSERT INTO dbo.[{0}] ({1}) VALUES ({2})", t.Name, fields.ToString(p => "[" + p + "]"), parameterized.ToString(null) ); break; case DbOperationType.UPDATE: parameterized = SqlServerUtilities.GetParameterized(mappers, paramsStartIndex, ref dynamicParameters, out fields); sql = string.Format("UPDATE dbo.[{0}] SET {1}", t.Name, fields.Combine(parameterized, (p, q) => "[" + p + "]" + "=" + q).ToString(null) ); break; case DbOperationType.DELETE: sql = string.Format("DELETE FROM dbo.[{0}]", t.Name); break; case DbOperationType.SELECT: fields = SqlServerUtilities.GetFields(mappers); sql = string.Format("SELECT {0} FROM dbo.[{1}] (NOLOCK)", fields.ToString(p => "[" + p + "]"), t.Name ); break; case DbOperationType.COUNT: sql = string.Format("SELECT COUNT(*) FROM dbo.[{0}] (NOLOCK)", t.Name); break; case DbOperationType.EXISTS: sql = string.Format("SELECT 1 FROM dbo.[{0}] (NOLOCK)", t.Name); break; } return(sql); }