internal static void PrepareUpdateAnonSql <T>(this IDbCommand dbCmd, IOrmLiteDialectProvider dialectProvider, object updateOnly, string whereSql) { var sql = StringBuilderCache.Allocate(); var modelDef = typeof(T).GetModelDefinition(); var fields = modelDef.FieldDefinitionsArray; foreach (var setField in updateOnly.GetType().GetPublicProperties()) { var fieldDef = fields.FirstOrDefault(x => string.Equals(x.Name, setField.Name, StringComparison.OrdinalIgnoreCase)); if (fieldDef == null || fieldDef.ShouldSkipUpdate()) { continue; } if (sql.Length > 0) { sql.Append(", "); } var value = setField.GetPropertyGetterFn()(updateOnly); sql .Append(dialectProvider.GetQuotedColumnName(fieldDef.FieldName)) .Append("=") .Append(dialectProvider.AddParam(dbCmd, value, fieldDef.ColumnType).ParameterName); } dbCmd.CommandText = $"UPDATE {dialectProvider.GetQuotedTableName(modelDef)} " + $"SET {StringBuilderCache.ReturnAndFree(sql)} {whereSql}"; }