Esempio n. 1
0
        public static WhereExpression GetPrimaryKeyWhere(Entity entity)
        {
            var pkFilds = entity.GetPrimaryKeyFields();
            var exp     = new WhereExpression();

            foreach (var field in pkFilds)
            {
                var newExp = field == entity.GetValue(field.PropertyName);
                if (WhereExpression.IsNullOrEmpty(exp))
                {
                    exp = newExp;
                }
                else
                {
                    exp = WhereExpression.Create(exp, newExp, QueryOperator.And);
                }
            }
            return(exp);
        }
Esempio n. 2
0
        /// <summary>
        /// 创建删除DbCommand
        /// </summary>
        /// <param name="tableName"></param>
        /// <param name="where"></param>
        /// <returns></returns>
        public DbCommand CreateDeleteCommand(string tableName, WhereExpression where)
        {
            if (WhereExpression.IsNullOrEmpty(where))
            {
                where = WhereExpression.ALL;
            }
            var           translater = CreateTranslater();
            StringBuilder sql        = new StringBuilder();

            sql.Append(ExpressionTranslater.SQL_DELETEFROM);
            sql.Append(db.DbProvider.BuildTableName(tableName));
            sql.Append(ExpressionTranslater.SQL_WHERE);
            sql.Append(translater.TranslateWhere(where));
            DbCommand cmd = db.GetSqlStringCommand(sql.ToString());

            db.AddCommandParameter(cmd, translater.Params.ToArray());

            return(cmd);
        }
Esempio n. 3
0
        public static WhereExpression GetPrimaryKeyWhere <T>(object[] pkValues)
            where T : Entity
        {
            var entity  = EntityHelper.GetTable <T>();
            var pkFilds = entity.GetPrimaryKeyFields();
            var exp     = new WhereExpression();

            for (var i = 0; i < pkFilds.Length; i++)
            {
                var field = pkFilds[i];
                var value = pkValues[i];
                if (WhereExpression.IsNullOrEmpty(exp))
                {
                    exp = field == value;
                }
                else
                {
                    exp = WhereExpression.Create(exp, field == value, QueryOperator.Or);
                }
            }
            return(exp);
        }
Esempio n. 4
0
        /// <summary>
        /// 创建更新DbCommand
        /// </summary>
        /// <typeparam name="T"></typeparam>
        /// <param name="fields"></param>
        /// <param name="values"></param>
        /// <param name="where"></param>
        /// <returns></returns>
        public DbCommand CreateUpdateCommand <T>(Field[] fields, object[] values, WhereExpression where)
            where T : Entity
        {
            Guard.Check(!EntityHelper.IsReadOnly <T>(), TextResource.CanNotReadOnly.FormatWith(EntityHelper.GetName <T>()));
            if (null == fields || fields.Length == 0 || null == values || values.Length == 0)
            {
                return(null);
            }
            Guard.Check(fields.Length == values.Length, TextResource.ArgumentShouldEqual.FormatWith("字段的个数", "值的个数"));
            int   length        = fields.Length;
            Field identityField = EntityHelper.GetIdentityField <T>();
            bool  identityExist = !Field.IsNullOrEmpty(identityField);

            if (WhereExpression.IsNullOrEmpty(where))
            {
                where = WhereExpression.ALL;
            }

            StringBuilder sql = new StringBuilder();

            sql.Append(ExpressionTranslater.SQL_UPDDATE);
            sql.Append(db.DbProvider.BuildTableName(EntityHelper.GetName <T>()));
            sql.Append(ExpressionTranslater.SQL_UPDATE_SET);
            List <QueryParameter> list   = new List <QueryParameter>();
            StringBuilder         colums = new StringBuilder();
            var appended = false;

            for (int i = 0; i < length; i++)
            {
                if (identityExist && fields[i].PropertyName.Equals(identityField.PropertyName))
                {
                    continue;
                }
                if (appended)
                {
                    colums.Append(",");
                }
                appended = true;
                colums.Append(fields[i].FieldName);
                colums.Append("=");
                if (values[i] is Field)
                {
                    Field fieldValue = (Field)values[i];
                    colums.Append(fieldValue.FieldNameWithTable);
                }
                else
                {
                    string pname = CreateParmName();
                    colums.Append(pname);
                    var p = new QueryParameter(pname, values[i]);
                    list.Add(p);
                }
            }
            sql.Append(colums);
            var translater = CreateTranslater();

            sql.Append(ExpressionTranslater.SQL_WHERE);
            translater.SetParmStartIndex(paramCounter);
            sql.Append(translater.TranslateWhere(where));
            list.AddRange(translater.Params);

            DbCommand cmd = db.GetSqlStringCommand(sql.ToString());

            db.AddCommandParameter(cmd, list.ToArray());
            return(cmd);
        }