Esempio n. 1
0
        /// <summary>
        /// 指定替换对象查询,并返回对象列表
        /// </summary>
        /// <typeparam name="T"></typeparam>
        /// <param name="sql"></param>
        /// <param name="types"></param>
        /// <returns></returns>
        public override List <T> ExecList <T>(string sql, params Type[] types)
        {
            var list = SqlStopWatch.ReturnData(() =>
            {
                return(GetDataReader(sql, types));
            }, (r) =>
            {
                var pro     = TypeCache.GetTable(typeof(T)).Fields;
                var mapping = pro.Select(b => new Attribute.FieldMapping()
                {
                    ResultName = b.MemberName, QueryField = b.MemberName, PropertyType = b.PropertyType
                });
                var queryInfo = new LambdaQuery.Mapping.QueryInfo <T>(false, sql, mapping);
                return(ObjectConvert.DataReaderToSpecifiedList <T>(r.reader, queryInfo));
            });

            return(list);
            ////var reader = GetDataReader(sql, types);
            ////double runTime;
            ////return ObjectConvert.DataReaderToList<T>(reader, out runTime);
            //var pro = TypeCache.GetTable(typeof(T)).Fields;
            //var mapping = pro.Select(b => new Attribute.FieldMapping() { MappingName = b.MemberName, QueryName = b.MemberName }).ToList();
            //var queryInfo = new LambdaQuery.Mapping.QueryInfo<T>(false, sql, mapping);
            //var list = ObjectConvert.DataReaderToSpecifiedList<T>(reader, queryInfo);
        }
Esempio n. 2
0
        /// <summary>
        /// 使用完整的LamadaQuery查询
        /// </summary>
        /// <typeparam name="TModel"></typeparam>
        /// <param name="query"></param>
        /// <param name="cacheKey">cacheKey</param>
        /// <returns></returns>
        public override List <TModel> QueryOrFromCache <TModel>(LambdaQuery <TModel> query, out string cacheKey)
        {
            cacheKey = "";
            CheckTableCreated <TModel>();
            List <TModel> list = new List <TModel>();

            if (query.SkipPage > 0)//按分页
            {
                list = QueryResult <TModel>(query);
                if (SettingConfig.AutoTrackingModel && query.__TrackingModel)
                {
                    SetOriginClone(list);
                }
                return(list);
            }
            cacheKey = "";
            System.Data.Common.DbDataReader reader;
            query.FillParames(this);
            var    sql       = query.GetQuery();
            var    cacheTime = query.__ExpireMinute;
            var    compileSp = query.__CompileSp;
            double runTime   = 0;
            var    db        = GetDBHelper(AccessType.Read);

            if (cacheTime <= 0)
            {
                list = SqlStopWatch.ReturnList(() =>
                {
                    if (!compileSp)
                    {
                        reader = db.ExecDataReader(sql);
                    }
                    else//生成储过程
                    {
                        string sp = CompileSqlToSp(_DBAdapter.TemplateSp, sql);
                        reader    = db.RunDataReader(sp);
                    }
                    query.ExecuteTime += db.ExecuteTime;
                    var queryInfo      = new LambdaQuery.Mapping.QueryInfo <TModel>(false, query.GetQueryFieldString(), query.GetFieldMapping());
                    return(ObjectConvert.DataReaderToSpecifiedList <TModel>(reader, queryInfo));
                }, sql);
                query.MapingTime += runTime;
            }
            else
            {
                list = MemoryDataCache.CacheService.GetCacheList <TModel>(sql, query.GetFieldMapping(), cacheTime, db, out cacheKey).Values.ToList();
            }
            ClearParame();
            query.RowCount = list.Count;
            if (SettingConfig.AutoTrackingModel && query.__TrackingModel)
            {
                SetOriginClone(list);
            }
            return(list);
        }
Esempio n. 3
0
        /// <summary>
        /// 指定替换对象查询,并返回对象列表
        /// </summary>
        /// <typeparam name="T"></typeparam>
        /// <param name="sql"></param>
        /// <param name="types"></param>
        /// <returns></returns>
        public override List <T> ExecList <T>(string sql, params Type[] types)
        {
            sql = _DBAdapter.SqlFormat(sql);
            var    reader = GetDataReader(sql, types);
            double runTime;
            //return ObjectConvert.DataReaderToList<T>(reader, out runTime);
            var pro     = TypeCache.GetTable(typeof(T)).Fields;
            var mapping = pro.Select(b => new Attribute.FieldMapping()
            {
                MappingName = b.MemberName, QueryName = b.MemberName
            }).ToList();
            var queryInfo = new LambdaQuery.Mapping.QueryInfo <T>(false, mapping);
            var list      = ObjectConvert.DataReaderToSpecifiedList <T>(reader, queryInfo);

            return(list);
        }
Esempio n. 4
0
        /// <summary>
        /// 执行存储过程返回结果集
        /// </summary>
        /// <typeparam name="T"></typeparam>
        /// <param name="sp"></param>
        /// <returns></returns>
        public override List <T> RunList <T>(string sp)
        {
            var reader = dbHelper.RunDataReader(sp);

            ClearParame();
            double runTime;
            //return ObjectConvert.DataReaderToList<T>(reader, out runTime);
            var pro     = TypeCache.GetTable(typeof(T)).Fields;
            var mapping = pro.Select(b => new Attribute.FieldMapping()
            {
                MappingName = b.MemberName, QueryName = b.MemberName
            }).ToList();
            var queryInfo = new LambdaQuery.Mapping.QueryInfo <T>(false, mapping);
            var list      = ObjectConvert.DataReaderToSpecifiedList <T>(reader, queryInfo);

            return(list);
        }
Esempio n. 5
0
        /// <summary>
        /// 执行存储过程返回结果集
        /// </summary>
        /// <typeparam name="T"></typeparam>
        /// <param name="sp"></param>
        /// <returns></returns>
        public override List <T> RunList <T>(string sp)
        {
            var list = SqlStopWatch.ReturnList(() =>
            {
                var db     = GetDBHelper(DataAccessType.Read);
                var reader = db.RunDataReader(sp);
                ClearParame();
                var pro     = TypeCache.GetTable(typeof(T)).Fields;
                var mapping = pro.Select(b => new Attribute.FieldMapping()
                {
                    ResultName = b.MemberName, QueryField = b.MemberName, PropertyType = b.PropertyType
                }).ToList();
                var queryInfo = new LambdaQuery.Mapping.QueryInfo <T>(false, sp, mapping);
                return(ObjectConvert.DataReaderToSpecifiedList <T>(reader, queryInfo));
            }, sp);

            return(list);
        }
Esempio n. 6
0
        /// <summary>
        /// 按匿名对象
        /// </summary>
        /// <typeparam name="TResult"></typeparam>
        /// <param name="query"></param>
        /// <param name="newExpression"></param>
        /// <returns></returns>
        public override List <TResult> QueryResult <TResult>(LambdaQueryBase query, NewExpression newExpression)
        {
            List <TResult> list;
            var            queryInfo = new LambdaQuery.Mapping.QueryInfo <TResult>(true, query.GetQueryFieldString(), null, newExpression.Constructor);

            if (query.SkipPage > 0)
            {
                var reader = GetPageReader(query);
                int count;
                list           = reader.GetDataTResult <TResult>(queryInfo, out count);
                query.RowCount = count;
            }
            else
            {
                var reader = GetQueryDynamicReader(query);
                list = ObjectConvert.DataReaderToSpecifiedList <TResult>(reader, queryInfo);
            }
            return(list);
        }
Esempio n. 7
0
        /// <summary>
        /// 按select返回指定类型
        /// </summary>
        /// <typeparam name="TResult"></typeparam>
        /// <param name="query"></param>
        /// <returns></returns>
        public override List <TResult> QueryResult <TResult>(LambdaQueryBase query)
        {
            var queryInfo = new LambdaQuery.Mapping.QueryInfo <TResult>(false, query.GetQueryFieldString(), query.GetFieldMapping());

            if (query.SkipPage > 0)
            {
                //var reader = GetPageReader(query);
                //int count;
                //var list = reader.GetDataTResult<TResult>(queryInfo, out count);
                //query.RowCount = count;
                //return list;

                var list = SqlStopWatch.ReturnData(() =>
                {
                    return(GetPageReader(query));
                }, (r) =>
                {
                    int count;
                    var list2        = r.GetDataTResult <TResult>(queryInfo, out count);
                    query.__RowCount = count;
                    return(list2);
                });
                return(list);
            }
            else
            {
                //var reader = GetQueryDynamicReader(query);
                //var list = ObjectConvert.DataReaderToSpecifiedList<TResult>(reader, queryInfo);
                //query.RowCount = list.Count;
                //return list;
                var list = SqlStopWatch.ReturnData(() =>
                {
                    return(GetQueryDynamicReader(query));
                }, (r) =>
                {
                    var list2        = ObjectConvert.DataReaderToSpecifiedList <TResult>(r.reader, queryInfo);
                    query.__RowCount = list2.Count;
                    return(list2);
                });
                return(list);
            }
        }
Esempio n. 8
0
        /// <summary>
        /// 按select返回指定类型
        /// </summary>
        /// <typeparam name="TResult"></typeparam>
        /// <param name="query"></param>
        /// <returns></returns>
        public override List <TResult> QueryResult <TResult>(LambdaQueryBase query)
        {
            var queryInfo = new LambdaQuery.Mapping.QueryInfo <TResult>(false, query.GetQueryFieldString(), query.GetFieldMapping());

            if (query.SkipPage > 0)
            {
                var reader = GetPageReader(query);
                int count;
                var list = reader.GetDataTResult <TResult>(queryInfo, out count);
                query.RowCount = count;
                return(list);
            }
            else
            {
                var reader = GetQueryDynamicReader(query);
                var list   = ObjectConvert.DataReaderToSpecifiedList <TResult>(reader, queryInfo);
                query.RowCount = list.Count;
                return(list);
            }
        }
Esempio n. 9
0
        /// <summary>
        /// 按匿名对象
        /// </summary>
        /// <typeparam name="TResult"></typeparam>
        /// <param name="query"></param>
        /// <param name="newExpression"></param>
        /// <returns></returns>
        public override List <TResult> QueryResult <TResult>(LambdaQueryBase query, NewExpression newExpression)
        {
            List <TResult> list;
            var            queryInfo = new LambdaQuery.Mapping.QueryInfo <TResult>(true, query.GetQueryFieldString(), null, newExpression.Constructor);

            if (query.SkipPage > 0)
            {
                //var reader = GetPageReader(query);
                //int count;
                //list = reader.GetDataTResult<TResult>(queryInfo, out count);
                //query.RowCount = count;
                list = SqlStopWatch.ReturnData(() =>
                {
                    return(GetPageReader(query));
                }, (r) =>
                {
                    int count;
                    var list2      = r.GetDataTResult <TResult>(queryInfo, out count);
                    query.RowCount = count;
                    return(list2);
                });
            }
            else
            {
                //var reader = GetQueryDynamicReader(query);
                //list = ObjectConvert.DataReaderToSpecifiedList<TResult>(reader, queryInfo);
                list = SqlStopWatch.ReturnData(() =>
                {
                    return(GetQueryDynamicReader(query));
                }, (r) =>
                {
                    var list2 = ObjectConvert.DataReaderToSpecifiedList <TResult>(r.reader, queryInfo);
                    return(list2);
                });
            }
            return(list);
        }
Esempio n. 10
0
        /// <summary>
        /// 使用完整的LamadaQuery查询
        /// </summary>
        /// <typeparam name="TModel"></typeparam>
        /// <param name="iQuery"></param>
        /// <param name="cacheKey">cacheKey</param>
        /// <returns></returns>
        public override List <TModel> QueryOrFromCache <TModel>(ILambdaQuery <TModel> iQuery, out string cacheKey)
        {
            var query = iQuery as LambdaQueryBase;

            cacheKey = "";
            CheckTableCreated <TModel>();
            List <TModel> list = new List <TModel>();

            if (query.SkipPage > 0)//按分页
            {
                list = QueryResult <TModel>(query);
                //分页不创建Clone
                //if (SettingConfig.AutoTrackingModel && query.__TrackingModel)
                //{
                //    SetOriginClone(list);
                //}
                return(list);
            }
            cacheKey = "";
            System.Data.Common.DbDataReader reader;
            query.FillParames(this);
            var sql = query.GetQuery();

            sql = _DBAdapter.SqlFormat(sql);
            var    cacheTime = query.__ExpireMinute;
            var    compileSp = query.__CompileSp;
            double runTime   = 0;
            var    db        = GetDBHelper(DataAccessType.Read);

            if (cacheTime <= 0)
            {
                list = SqlStopWatch.ReturnList(() =>
                {
                    if (!compileSp || !_DBAdapter.CanCompileSP)
                    {
                        reader = db.ExecDataReader(sql);
                    }
                    else//生成储过程
                    {
                        string sp = CompileSqlToSp(_DBAdapter.TemplateSp, sql);
                        reader    = db.RunDataReader(sp);
                    }
                    query.ExecuteTime += db.ExecuteTime;
                    var queryInfo      = new LambdaQuery.Mapping.QueryInfo <TModel>(false, query.GetQueryFieldString(), query.GetFieldMapping());
                    return(ObjectConvert.DataReaderToSpecifiedList <TModel>(reader, queryInfo));
                }, sql);
                query.MapingTime += runTime;
                //if(!string.IsNullOrEmpty(query.__RemoveInJionBatchNo))
                //{
                //    Delete<InJoin>(b => b.BatchNo == query.__RemoveInJionBatchNo);
                //    query.__RemoveInJionBatchNo = "";
                //}
            }
            else
            {
                list = MemoryDataCache.CacheService.GetCacheList <TModel>(sql, query.GetFieldMapping(), cacheTime, db, out cacheKey).Values.ToList();
            }
            ClearParame();
            query.__RowCount = list.Count;
            //query = null;
            return(list);
        }