コード例 #1
0
ファイル: Orm.cs プロジェクト: zh-qi/onlyorm
        /// <summary>
        /// 根据实例主键进行更新
        /// </summary>
        /// <param name="action">更新动作</param>
        /// <param name="conditions">更新的条件</param>
        public static bool UpdateWhere <T>(Expression <Action <T> > action, Expression <Func <T, bool> > conditions) where T : OrmBaseModel
        {
            SqlVisitor visitor = new SqlVisitor();

            visitor.Visit(action);
            var setStr     = visitor.GetSql();
            var setPrarmes = visitor.GetParameters();

            visitor.Visit(conditions);
            var whereStr     = visitor.GetSql();
            var wherePrarmes = visitor.GetParameters();

            var sqlStr = SqlCache <T> .GetSql(SqlType.UpdateWhere) + setStr + " WHERE " + whereStr;

            var allParames = new List <MySqlParameter>();

            allParames.AddRange(setPrarmes);
            allParames.AddRange(wherePrarmes);

            return(ExceteSql <bool>(sqlStr, allParames.ToArray(), command =>
            {
                var result = command.ExecuteNonQuery();
                return result >= 1;
            }));
        }
コード例 #2
0
ファイル: Orm.cs プロジェクト: zh-qi/onlyorm
        /// <summary>
        /// 批量获取符合条件的数据
        /// </summary>
        /// <param name="conditions">查找的条件</param>
        public static IList <T> FindWhere <T>(Expression <Func <T, bool> > conditions) where T : OrmBaseModel
        {
            SqlVisitor visitor = new SqlVisitor();

            visitor.Visit(conditions);
            var sqlStr = SqlCache <T> .GetSql(SqlType.FindWhere) + visitor.GetSql();

            var parameters = visitor.GetParameters();

            return(ExceteSql <IList <T> >(sqlStr, parameters, command =>
            {
                var result = new List <T>();
                var type = typeof(T);
                var properies = SqlCache <T> .AllProperties;
                var adapter = new MySqlDataAdapter(command);
                var dataSet = new DataSet();
                var count = adapter.Fill(dataSet);

                for (var i = 0; i < dataSet.Tables[0].Rows.Count; i++)
                {
                    T t = Activator.CreateInstance <T>();
                    foreach (var proerty in properies)
                    {
                        var value = dataSet.Tables[0].Rows[i][proerty.GetMappingName()];
                        proerty.SetValue(t, value is DBNull ? null : value);
                    }
                    result.Add(t);
                }

                return result;
            }));
        }
コード例 #3
0
        internal static string GenerateSql(VfpProviderManifest vfpManifest, DbCommandTree commandTree, out List <DbParameter> parameters, out CommandType commandType)
        {
            commandType = CommandType.Text;
            parameters  = null;

            //Handle Query
            var queryCommandTree = commandTree as DbQueryCommandTree;

            if (queryCommandTree != null)
            {
                var sqlSelectVisitor = new SqlVisitor();
                var sqlFragment      = sqlSelectVisitor.Visit(vfpManifest, queryCommandTree, out parameters);

                return(WriteSql(sqlFragment, sqlSelectVisitor));
            }

            //Handle Function
            var functionCommandTree = commandTree as DbFunctionCommandTree;

            if (functionCommandTree != null)
            {
                return(DmlSqlFormatter.GenerateFunctionSql(functionCommandTree, out commandType));
            }

            //Handle Insert
            var insertCommandTree = commandTree as DbInsertCommandTree;

            if (insertCommandTree != null)
            {
                return(DmlSqlFormatter.GenerateInsertSql(vfpManifest, insertCommandTree, out parameters));
            }

            //Handle Delete
            var deleteCommandTree = commandTree as DbDeleteCommandTree;

            if (deleteCommandTree != null)
            {
                return(DmlSqlFormatter.GenerateDeleteSql(vfpManifest, deleteCommandTree, out parameters));
            }

            //Handle Update
            var updateCommandTree = commandTree as DbUpdateCommandTree;

            if (updateCommandTree != null)
            {
                return(DmlSqlFormatter.GenerateUpdateSql(vfpManifest, updateCommandTree, out parameters));
            }

            return(null);
        }
コード例 #4
0
ファイル: Orm.cs プロジェクト: zh-qi/onlyorm
        /// <summary>
        /// 根据表达式目录树,批量的删除
        /// </summary>
        /// <param name="conditions">删除的条件</param>
        public static bool DeleateWhere <T>(Expression <Func <T, bool> > conditions) where T : OrmBaseModel
        {
            if (null == conditions)
            {
                return(false);
            }

            SqlVisitor visitor = new SqlVisitor();

            visitor.Visit(conditions);
            var sqlStr = SqlCache <T> .GetSql(SqlType.DeleateWhere) + visitor.GetSql();

            var parameters = visitor.GetParameters();

            return(ExceteSql <bool>(sqlStr, parameters, command =>
            {
                var result = command.ExecuteNonQuery();
                return result >= 1;
            }));
        }