Пример #1
0
        /// <summary>
        /// 返回动态类型
        /// </summary>
        /// <typeparam name="T"></typeparam>
        /// <typeparam name="TResult"></typeparam>
        /// <param name="query"></param>
        /// <param name="resultSelector"></param>
        /// <param name="compileSp"></param>
        /// <returns></returns>
        public List <TResult> QueryDynamic <T, TResult>(LambdaQuery <T> query, Expression <Func <T, TResult> > resultSelector, bool compileSp = false) where T : IModel, new()
        {
            CheckTableCreated <T>();
            string sql = "";

            query.FillParames(this);
            sql = query.GetQuery();
            sql = _DBAdapter.SqlFormat(sql);
            System.Data.Common.DbDataReader reader;
            List <TResult> list;

            if (!compileSp)
            {
                if (query.QueryTop > 0)
                {
                    helper.AutoFormatWithNolock = false;
                }
                reader = helper.ExecDataReader(sql);
            }
            else//生成储过程
            {
                string sp = CompileSqlToSp(_DBAdapter.TemplateSp, sql);
                reader = helper.RunDataReader(sql);
            }
            list = Dynamic.DynamicObjConvert.DataReaderToDynamic(reader, resultSelector, query.FieldMapping);
            ClearParame();
            return(list);
        }
Пример #2
0
        /// <summary>
        /// 返回动态对象的查询
        /// 已支持join group
        /// </summary>
        /// <typeparam name="T"></typeparam>
        /// <param name="query"></param>
        /// <param name="cacheTime"></param>
        /// <param name="compileSp"></param>
        /// <returns></returns>
        public List <dynamic> QueryDynamic <T>(LambdaQuery <T> query, int cacheTime = 0, bool compileSp = false)
            where T : IModel, new()
        {
            CheckTableCreated <T>();
            string sql = "";

            //foreach (var n in query.QueryParames)
            //{
            //    AddParam(n.Key, n.Value);
            //}
            query.FillParames(this);
            sql = query.GetQuery();
            sql = _DBAdapter.SqlFormat(sql);
            //DataTable dt;
            System.Data.Common.DbDataReader reader;
            List <dynamic> list;

            if (!compileSp)
            {
                if (query.QueryTop > 0)
                {
                    helper.AutoFormatWithNolock = false;
                }
                reader = helper.ExecDataReader(sql);
            }
            else//生成储过程
            {
                string sp = CompileSqlToSp(_DBAdapter.TemplateSp, sql);
                reader = helper.RunDataReader(sql);
            }
            list = Dynamic.DynamicObjConvert.DataReaderToDynamic(reader);

            ClearParame();
            return(list);
        }
Пример #3
0
        /// <summary>
        /// 返回动态对象的查询
        /// </summary>
        /// <typeparam name="TItem"></typeparam>
        /// <param name="query"></param>
        /// <returns></returns>
        internal System.Data.Common.DbDataReader GetQueryDynamicReader <TItem>(LambdaQuery <TItem> query)
            where TItem : IModel, new()
        {
            CheckTableCreated <TItem>();
            string sql = "";

            query.FillParames(this);
            sql = query.GetQuery();
            sql = _DBAdapter.SqlFormat(sql);
            System.Data.Common.DbDataReader reader;
            var compileSp = query.__CompileSp;

            if (!compileSp)
            {
                if (query.__QueryTop > 0)
                {
                    dbHelper.AutoFormatWithNolock = false;
                }
                reader = dbHelper.ExecDataReader(sql);
            }
            else//生成储过程
            {
                string sp = CompileSqlToSp(_DBAdapter.TemplateSp, sql);
                reader = dbHelper.RunDataReader(sp);
            }
            query.ExecuteTime = dbHelper.ExecuteTime;
            ClearParame();
            return(reader);
        }
Пример #4
0
        /// <summary>
        /// 使用完整的LamadaQuery查询
        /// </summary>
        /// <typeparam name="TItem"></typeparam>
        /// <param name="query"></param>
        /// <param name="cacheTime"></param>
        /// <param name="cacheKey">过期时间,分</param>
        /// <param name="compileSp">是否编译成储过程</param>
        /// <returns></returns>
        public List <TItem> QueryList <TItem>(LambdaQuery <TItem> query, int cacheTime, out string cacheKey, bool compileSp = false) where TItem : IModel, new()
        {
            CheckTableCreated <TItem>();
            if (query.PageSize > 0)//按分页
            {
                cacheKey = "";
                int count;
                return(AutoSpPage(query, out count));
            }
            string sql = "";
            bool   setConstraintObj = true;

            cacheKey = "";
            //foreach (var n in query.QueryParames)
            //{
            //    AddParam(n.Key, n.Value);
            //}
            query.FillParames(this);
            sql = query.GetQuery();
            sql = _DBAdapter.SqlFormat(sql);
            //DataTable dt;
            System.Data.Common.DbDataReader reader;
            List <TItem> list;

            if (cacheTime <= 0)
            {
                if (!compileSp)
                {
                    if (query.QueryTop > 0)
                    {
                        helper.AutoFormatWithNolock = false;
                    }
                    reader = helper.ExecDataReader(sql);
                }
                else//生成储过程
                {
                    string sp = CompileSqlToSp(_DBAdapter.TemplateSp, sql);
                    reader = helper.RunDataReader(sql);
                }
                list = ObjectConvert.DataReaderToList <TItem>(reader, setConstraintObj, query.FieldMapping);
            }
            else
            {
                list = MemoryDataCache.GetCacheList <TItem>(sql, cacheTime, helper, out cacheKey).Values.ToList();
            }
            ClearParame();
            query.RowCount = list.Count;
            SetOriginClone(list);
            return(list);
        }
Пример #5
0
        /// <summary>
        /// 使用完整的LamadaQuery查询
        /// </summary>
        /// <typeparam name="TItem"></typeparam>
        /// <param name="query"></param>
        /// <param name="cacheKey">cacheKey</param>
        /// <returns></returns>
        public List <TItem> QueryList <TItem>(LambdaQuery <TItem> query, out string cacheKey) where TItem : IModel, new()
        {
            CheckTableCreated <TItem>();
            if (query.__PageSize > 0)//按分页
            {
                cacheKey = "";
                return(Page <TItem, TItem>(query));
            }
            string sql = "";

            cacheKey = "";
            query.FillParames(this);
            sql = query.GetQuery();
            sql = _DBAdapter.SqlFormat(sql);
            System.Data.Common.DbDataReader reader;
            var          cacheTime = query.__ExpireMinute;
            var          compileSp = query.__CompileSp;
            List <TItem> list;
            double       runTime;

            if (cacheTime <= 0)
            {
                if (!compileSp)
                {
                    if (query.__QueryTop > 0)
                    {
                        dbHelper.AutoFormatWithNolock = false;
                    }
                    reader = dbHelper.ExecDataReader(sql);
                }
                else//生成储过程
                {
                    string sp = CompileSqlToSp(_DBAdapter.TemplateSp, sql);
                    reader = dbHelper.RunDataReader(sql);
                }
                query.ExecuteTime += dbHelper.ExecuteTime;
                list              = ObjectConvert.DataReaderToList <TItem>(reader, out runTime, true);
                query.MapingTime += runTime;
            }
            else
            {
                list = MemoryDataCache.CacheService.GetCacheList <TItem>(sql, cacheTime, dbHelper, out cacheKey).Values.ToList();
            }
            ClearParame();
            query.RowCount = list.Count;
            SetOriginClone(list);
            return(list);
        }
Пример #6
0
        /// <summary>
        /// 按类型获取缓存,只能在继承类实现,只能同时有一个类型
        /// 不建议直接调用,请调用AllCache或重写调用
        /// </summary>
        /// <param name="query"></param>
        /// <returns></returns>
        protected Dictionary <string, T> GetCache(LambdaQuery <T> query)
        {
            Type type      = typeof(T);
            int  expMinute = query.__ExpireMinute;

            if (expMinute == 0)
            {
                expMinute = 5;
            }
            query.__ExpireMinute = expMinute;
            string dataCacheKey;
            var    list = new Dictionary <string, T>();
            var    db   = DBExtend as AbsDBExtend;
            var    a    = TypeCache.GetModelKeyCache(type, db.DatabaseName, out dataCacheKey);

            if (!a)
            {
                var helper = db.dbContext.DBHelper;
                foreach (var p in query.QueryParames)
                {
                    helper.AddParam(p.Item1, p.Item2);
                }
                var sql = query.GetQuery();
                list = MemoryDataCache.CacheService.GetCacheList <T>(sql, query.GetFieldMapping(), expMinute, helper, out dataCacheKey);

                lock (lockObj)
                {
                    string key2;
                    a = TypeCache.GetModelKeyCache(type, db.DatabaseName, out key2);
                    if (!a)
                    {
                        TypeCache.SetModelKeyCache(type, db.DatabaseName, dataCacheKey);
                    }
                }
            }
            else
            {
                list = MemoryDataCache.CacheService.GetCacheItem <T>(dataCacheKey);
            }
            return(list);
        }