/// <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.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); } }
/// <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(), query.GetFieldMapping(), 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); }
/// <summary> /// 使用完整的LamadaQuery查询 /// </summary> /// <typeparam name="TModel"></typeparam> /// <param name="query"></param> /// <param name="cacheKey">cacheKey</param> /// <returns></returns> public override List <TModel> QueryOrFromCache <TModel>(LambdaQueryBase query, out string cacheKey) { 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; if (SettingConfig.AutoTrackingModel && query.__TrackingModel) { SetOriginClone(list); } //query = null; return(list); }