public static FormattedUpdateProperties BuildSqlForUpdate(ITable table, List <string> fieldsToIgnore = null) { FormattedUpdateProperties formattedProperties = new FormattedUpdateProperties(); var type = table.GetType(); //Can't save primarky keys. List <PropertyInfo> tableProperties; tableProperties = fieldsToIgnore == null? type.GetSqlPropertyInfo().Where(i => i.GetCustomAttribute <PrimaryKeyAttribute>() == null).ToList() : type.GetSqlPropertyInfo().Where(i => i.GetCustomAttribute <PrimaryKeyAttribute>() == null && fieldsToIgnore.All(p => i.Name != p)).ToList(); Dictionary <string, object> parameters = new Dictionary <string, object>(); List <Tuple <string, string> > fieldParameterMap = new List <Tuple <string, string> >(); foreach (var tableProperty in tableProperties) { var parameterName = $"@{tableProperty.Name}_parm"; parameters.Add(parameterName, tableProperty.GetValue(table)); fieldParameterMap.Add(new Tuple <string, string>(tableProperty.Name, parameterName)); } formattedProperties.UpdateStatement = string.Join(",", fieldParameterMap.Select(i => $"[{i.Item1}]={i.Item2}")); formattedProperties.Parameters = parameters; return(formattedProperties); }
public static SqlStatement GenerateUpdateStatement <TTable>(dynamic objectToUpdate, Expression <Func <TTable, bool> > where) where TTable : ITable { var tableType = typeof(TTable); ExpressionParser parser = new ExpressionParser(); SqlStatement sqlStatement = new SqlStatement(); FormattedUpdateProperties updateInfo = TypeParser.ParseDynamicForUpdate(objectToUpdate); var parsedWhereExpression = parser.ParseCompareFunction(where); sqlStatement.Statement = $"update {tableType.GetName()} set {updateInfo.UpdateStatement} {(string.IsNullOrEmpty(parsedWhereExpression.SqlStatement) ? string.Empty : "where " + parsedWhereExpression.SqlStatement)}"; sqlStatement.Parameters = updateInfo.Parameters.ToDynamicParameters(parsedWhereExpression.Parameters); return(sqlStatement); }
public static FormattedUpdateProperties ParseDynamicForUpdate(dynamic objectToUpdate) { FormattedUpdateProperties formattedProperties = new FormattedUpdateProperties(); Type tableType = objectToUpdate.GetType(); List <PropertyInfo> tableProperties = tableType.GetSqlPropertyInfo(); Dictionary <string, object> parameters = new Dictionary <string, object>(); List <Tuple <string, string> > fieldParameterMap = new List <Tuple <string, string> >(); foreach (var tableProperty in tableProperties) { var parameterName = $"@{tableProperty.Name}_parm"; parameters.Add(parameterName, tableProperty.GetValue(objectToUpdate)); fieldParameterMap.Add(new Tuple <string, string>(tableProperty.Name, parameterName)); } formattedProperties.UpdateStatement = string.Join(",", fieldParameterMap.Select(i => $"[{i.Item1}]={i.Item2}")); formattedProperties.Parameters = parameters; return(formattedProperties); }