コード例 #1
0
        public Model2Sql Model2SQL <T>(Model2Db sqlType, object model)
        {
            CheckKey <T>();
            Model2Sql sqlObject = new Model2Sql();

            sqlObject.SqlType = sqlType;
            string tableName               = ReflectionHelper.GetTypeName <T>();
            List <PropertyInfo> keys       = ReflectionHelper.GetKeys <T>();
            List <PropertyInfo> objectKeys = ReflectionHelper.GetObjectKeys(keys, model);


            if (!objectKeys.Any())
            {
                throw new ArgumentException("匿名类中不包括表主键");
            }

            switch (sqlType)
            {
            case Model2Db.Add:
                break;

            case Model2Db.Delete:
                sqlObject.Sql = string.Format("DELETE FROM {0} WHERE {1}", tableName, CreatWhere(keys));
                PropertyAdd2Param(model, sqlObject, objectKeys);
                break;

            case Model2Db.Update:
                List <PropertyInfo> nonKeys = ReflectionHelper.GetPropertysExceptBy(ReflectionHelper.GetPropertys(model), keys);
                sqlObject.Sql = string.Format("UPDATE {0} {1} WHERE {2}", tableName, CreateUpdate(nonKeys), CreatWhere(keys));
                PropertyAdd2Param(model, sqlObject, nonKeys);
                PropertyAdd2Param(model, sqlObject, objectKeys);
                break;

            case Model2Db.Query:
                sqlObject.Sql = string.Format("SELECT {0} FROM {1} WHERE {2}", CreateQuery <T>(), tableName, CreatWhere(objectKeys));
                PropertyAdd2Param(model, sqlObject, objectKeys);
                break;

            default:
                break;
            }

            return(sqlObject);
        }
コード例 #2
0
        /// <summary>
        /// 将IQuery查询条件转化为sql语句
        /// </summary>
        /// <typeparam name="T"></typeparam>
        /// <param name="query"></param>
        /// <returns></returns>
        public Model2Sql Model2SQL <T>(Model2Db model, IQuery query)
        {
            if (model != Model2Db.Count)
            {
                throw new ArgumentException("不支持此类型");
            }

            CheckKey <T>();
            List <PropertyInfo> keys = ReflectionHelper.GetKeys <T>();
            IOrder order             = new Order();

            foreach (var item in keys)
            {
                order.Add(item.Name, OrderDirection.Desc);
            }
            Model2Sql sqlObject = GetQuerySQL <T>(query);

            sqlObject.Sql = String.Format("SELECT COUNT(*) FROM {0} WHERE {1} ORDER BY {2}", ReflectionHelper.GetTypeName <T>(), sqlObject.Sql, GetOrderSQL <T>(order).Sql);
            return(sqlObject);
        }
コード例 #3
0
        public Model2Sql Model2SQL <T>(Model2Db sqlType, T model)
        {
            switch (sqlType)
            {
            case Model2Db.Add:
            case Model2Db.Delete:
            case Model2Db.Update:
                if (model == null)
                {
                    throw new ArgumentException("模型不能为null");
                }
                break;

            case Model2Db.Query:
            case Model2Db.Count:
                break;

            default:
                break;
            }

            CheckKey <T>();
            Model2Sql sqlObject = new Model2Sql();

            sqlObject.SqlType = sqlType;
            List <PropertyInfo> keys    = ReflectionHelper.GetKeys <T>();
            List <PropertyInfo> nonKeys = ReflectionHelper.GetNonKey <T>();
            string tableName            = ReflectionHelper.GetTypeName <T>();

            switch (sqlType)
            {
            case Model2Db.Add:
                sqlObject.Sql = string.Format("INSERT INTO {0} ({1}) VALUES (@{2})", tableName, string.Join(",", ReflectionHelper.GetPropertys <T>().Select(p => p.Name).ToArray()), string.Join(",@", ReflectionHelper.GetPropertys <T>().Select(p => p.Name).ToArray()));
                ReflectionHelper.GetPropertys <T>().ToList().ForEach((p) => { sqlObject.Param.Add("@" + p.Name, p.GetValue(model)); });
                break;

            case Model2Db.Delete:
                sqlObject.Sql = string.Format("DELETE FROM {0} WHERE {1}", tableName, CreatWhere(keys));
                PropertyAdd2Param <T>(model, sqlObject, keys);
                break;

            case Model2Db.Update:
                sqlObject.Sql = string.Format("UPDATE {0} {1} WHERE {2}", tableName, CreateUpdate(nonKeys), CreatWhere(keys));
                PropertyAdd2Param <T>(model, sqlObject, nonKeys);
                PropertyAdd2Param <T>(model, sqlObject, keys);
                break;

            case Model2Db.Query:

                IOrder order = new Order();
                foreach (var item in keys)
                {
                    order.Add(item.Name, OrderDirection.Desc);
                }

                sqlObject.Sql = string.Format("SELECT {0} FROM {1} ORDER BY {2}", CreateQuery <T>(), tableName, GetOrderSQL <T>(order).Sql);
                break;

            case Model2Db.Count:
                sqlObject.Sql = string.Format("SELECT COUNT(*) FROM {0}", tableName);
                break;

            default:
                break;
            }

            return(sqlObject);
        }