private TypedUpdateStatement <T> Values(object values, IEnumerable <string> onlyFields, bool addPrimaryKeyWhereCondition) { //Filter computed fields var fields = values.GetType().GetModelDefinition().FieldDefinitions.Where( fieldDef => !fieldDef.IsComputed && !fieldDef.AutoIncrement && !fieldDef.IsPrimaryKey); //Filter fields not on the onlyFields list if (onlyFields != null) { var fieldsArray = onlyFields as string[] ?? onlyFields.ToArray(); fields = fields.Where(fieldDef => fieldsArray.Contains(_dialectProvider.GetQuotedColumnName(fieldDef.Name))); } //Filters fields not in the T object if (typeof(T) != values.GetType()) { var tmp = _modelDefinition.FieldDefinitions.Select(x => x.Name).ToArray(); fields = fields.Where(f => tmp.Contains(f.Name)); } //Retrieve new values foreach (var fieldDef in fields) { var pname = _dialectProvider.GetParameterName(Statement.Parameters.Count); Statement.UpdateFields.Add(_dialectProvider.GetQuotedColumnName(fieldDef.FieldName), pname); Statement.Parameters.Add(pname, fieldDef.GetValue(values)); } //Add Primarykey filter if required if (addPrimaryKeyWhereCondition) { var pks = _modelDefinition.FieldDefinitions.Where(x => x.IsPrimaryKey).ToArray(); foreach (var pk in pks) { if (Statement.WhereExpression.Length > 0) { Statement.WhereExpression.Append(" AND "); } var pname = _dialectProvider.GetParameterName(Statement.Parameters.Count); Statement.WhereExpression.Append(_dialectProvider.GetQuotedColumnName(pk.FieldName)); Statement.WhereExpression.Append("="); Statement.WhereExpression.Append(pname); Statement.Parameters.Add(pname, pk.GetValue(values)); } } return(this); }
public TypedDeleteStatement <T> AddPrimaryKeyWhereCondition(T values) { var pks = _modelDefinition.FieldDefinitions.Where(x => x.IsPrimaryKey).ToArray(); if (pks.Length == 0) { pks = _modelDefinition.FieldDefinitions.ToArray(); } foreach (var pk in pks) { if (Statement.WhereExpression.Length > 0) { Statement.WhereExpression.Append(" AND "); } var pname = _dialectProvider.GetParameterName(Statement.Parameters.Count); Statement.WhereExpression.Append(_dialectProvider.GetQuotedColumnName(pk.FieldName)); Statement.WhereExpression.Append("="); Statement.WhereExpression.Append(pname); Statement.Parameters.Add(pname, pk.GetValue(values)); } return(this); }
public TypedInsertStatement <T> Values(T values, IEnumerable <string> onlyFields) { var fieldsArray = onlyFields as string[] ?? onlyFields.ToArray(); var fields = _modelDefinition.FieldDefinitions .Where(fieldDef => !fieldDef.IsComputed) .Where(fieldDef => !fieldDef.AutoIncrement) .Where(fieldDef => !fieldsArray.Any() || fieldsArray.Contains(fieldDef.Name)).ToList(); foreach (var fieldDef in fields) { var v = fieldDef.GetValue(values) ?? fieldDef.DefaultValue; if (v != null) { var pname = _dialectProvider.GetParameterName(Statement.Parameters.Count); Statement.Parameters.Add(pname, v); Statement.InsertFields.Add(_dialectProvider.GetQuotedColumnName(fieldDef.FieldName)); } } return(this); }