/// <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); }
/// <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); }
/// <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); }
/// <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); }
/// <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); }
/// <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); }