Пример #1
0
        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);
        }
Пример #3
0
        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);
        }