public override List <TModel> QueryOrFromCache <TModel>(LambdaQueryBase query1, out string cacheKey) { cacheKey = "none"; var query = query1 as MongoDBLambdaQuery <TModel>; var collection = GetCollection <TModel>(); long rowNum = 0; var query2 = collection.Find(query.__MongoDBFilter).Sort(query._MongoDBSort); if (query.TakeNum > 0) { var pageIndex = query1.SkipPage - 1; var pageSize = query1.TakeNum; var skip = pageSize * pageIndex; if (skip > 0) { query2.Skip(skip); } query2.Limit(pageSize); rowNum = collection.Count(query.__MongoDBFilter); } var result = query2.ToList(); if (rowNum == 0) { rowNum = result.Count(); } query.__RowCount = (int)rowNum; SetOriginClone(result); return(result); }
/// <summary> /// 返回动态对象的查询 /// </summary> /// <param name="query"></param> /// <returns></returns> internal System.Data.Common.DbDataReader GetQueryDynamicReader(LambdaQueryBase query) { CheckTableCreated(query.__MainType); 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.TakeNum > 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> /// 返回动态对象的查询 /// </summary> /// <param name="query"></param> /// <returns></returns> internal CallBackDataReader GetQueryDynamicReader(LambdaQueryBase query) { CheckTableCreated(query.__MainType); var sql = ""; query.FillParames(this); sql = query.GetQuery(); sql = _DBAdapter.SqlFormat(sql); System.Data.Common.DbDataReader reader; var compileSp = query.__CompileSp; var db = GetDBHelper(DataAccessType.Read); if (!compileSp) { if (query.TakeNum > 0) { db.AutoFormatWithNolock = false; } reader = db.ExecDataReader(sql); } else//生成储过程 { string sp = CompileSqlToSp(_DBAdapter.TemplateSp, sql); reader = db.RunDataReader(sp); } query.ExecuteTime = db.ExecuteTime; ClearParame(); return(new CallBackDataReader(reader, null, sql)); }
/// <summary> /// GROUP和是否编译判断 /// </summary> /// <param name="query1"></param> /// <returns></returns> internal CallBackDataReader GetPageReader(LambdaQueryBase query1) { if (query1.__GroupFields.Count > 0) { return(GetGroupPageReader(query1)); } if (_DBAdapter.CanCompileSP && query1.__CompileSp) { return(GetSpPageReader(query1)); } CheckTableCreated(query1.__MainType); //var fields = query.GetQueryFieldString(b => b.Length > 500 || b.PropertyType == typeof(byte[])); var fields = query1.GetQueryFieldString(); var rowOver = query1.__QueryOrderBy; if (string.IsNullOrEmpty(rowOver)) { var table = TypeCache.GetTable(query1.__MainType); rowOver = string.Format("t1.{0} desc", table.PrimaryKey.MapingName); } var orderBy = System.Text.RegularExpressions.Regex.Replace(rowOver, @"t\d\.", "t."); var condition = query1.GetQueryConditions(); condition = _DBAdapter.SqlFormat(condition); query1.FillParames(this); var pageIndex = query1.SkipPage; var pageSize = query1.TakeNum; pageIndex = pageIndex == 0 ? 1 : pageIndex; pageSize = pageSize == 0 ? 15 : pageSize; string countSql = string.Format("select count(*) from {0}", condition); int count = Convert.ToInt32(__DbHelper.ExecScalar(countSql)); query1.ExecuteTime += __DbHelper.ExecuteTime; query1.RowCount = count; //if (count == 0) //{ // return null; //} int pageCount = (count + pageSize - 1) / pageSize; if (pageIndex > pageCount) { pageIndex = pageCount; } var start = pageSize * (pageIndex - 1) + 1; var end = start + pageSize - 1; string sql = _DBAdapter.PageSqlFormat(fields, rowOver, condition, start, end, orderBy); var reader = new CallBackDataReader(__DbHelper.ExecDataReader(sql), () => { return(count); }); query1.ExecuteTime += __DbHelper.ExecuteTime; ClearParame(); return(reader); }
public override List <TResult> QueryResult <TResult>(LambdaQueryBase query, NewExpression newExpression) { var typeDb = this.GetType(); var method = typeDb.GetMethod(nameof(QueryResultNewExpression), BindingFlags.NonPublic | BindingFlags.Instance); var result = method.MakeGenericMethod(new Type[] { query.__MainType, typeof(TResult) }).Invoke(this, new object[] { query, newExpression }); return(result as List <TResult>); }
/// <summary> /// 按编译 /// </summary> /// <param name="query1"></param> /// <returns></returns> CallBackDataReader GetSpGroupPageReader(LambdaQueryBase query1) { //var query1 = query as RelationLambdaQuery<TModel>; CheckTableCreated(query1.__MainType); var sb = new StringBuilder(); query1.GetQueryConditions(sb); var conditions = sb.ToString(); var fields = query1.GetQueryFieldString(); if (!conditions.Contains("group")) { throw new CRLException("缺少group语法"); } var rowOver = query1.GetOrder(); if (string.IsNullOrEmpty(rowOver)) { throw new CRLException("Group分页需指定Group排序字段"); //var table = TypeCache.GetTable(typeof(T)); //rowOver = string.Format("t1.{0} desc", table.PrimaryKey.Name); } var sort1 = System.Text.RegularExpressions.Regex.Replace(rowOver, @"t\d\.", ""); conditions = _DBAdapter.SqlFormat(conditions); query1.FillParames(this); var pageIndex = query1.SkipPage; var pageSize = query1.TakeNum; pageIndex = pageIndex == 0 ? 1 : pageIndex; pageSize = pageSize == 0 ? 15 : pageSize; AddParam("pageIndex", pageIndex); AddParam("pageSize", pageSize); var db = GetDBHelper(AccessType.Read); db.AddOutParam("count", -1); Dictionary <string, string> dic = new Dictionary <string, string>(); dic.Add("fields", fields); dic.Add("rowOver", rowOver); //dic.Add("pageSize", pageSize.ToString()); //dic.Add("sort", sort1); string sp = CompileSqlToSp(_DBAdapter.TemplateGroupPage, conditions, dic); CallBackDataReader reader; reader = new CallBackDataReader(db.RunDataReader(sp), () => { return(GetOutParam <int>("count")); }, sp); query1.ExecuteTime += db.ExecuteTime; ClearParame(); return(reader); }
/// <summary> /// 按编译 /// </summary> /// <param name="query1"></param> /// <returns></returns> CallBackDataReader GetSpPageReader(LambdaQueryBase query1) { //var query1 = query as RelationLambdaQuery<TModel>; CheckTableCreated(query1.__MainType); //var fields = query.GetQueryFieldString(b => b.Length > 500 || b.PropertyType == typeof(byte[])); var fields = query1.GetQueryFieldString(); var rowOver = query1.GetOrder(); if (string.IsNullOrEmpty(rowOver)) { var table = TypeCache.GetTable(query1.__MainType); if (table.PrimaryKey == null) { throw new Exception("分页缺少默认排序字段"); } rowOver = string.Format("t1.{0} desc", table.PrimaryKey.MapingName); } var orderBy = System.Text.RegularExpressions.Regex.Replace(rowOver, @"t\d\.", "t."); var sb = new StringBuilder(); query1.GetQueryConditions(sb); var condition = sb.ToString(); condition = _DBAdapter.SqlFormat(condition); query1.FillParames(this); var pageIndex = query1.SkipPage; var pageSize = query1.TakeNum; pageIndex = pageIndex == 0 ? 1 : pageIndex; pageSize = pageSize == 0 ? 15 : pageSize; AddParam("pageIndex", pageIndex); AddParam("pageSize", pageSize); AddOutParam("count", -1); Dictionary <string, string> dic = new Dictionary <string, string>(); dic.Add("fields", fields); dic.Add("sort", orderBy); dic.Add("rowOver", rowOver); //dic.Add("pageSize", pageSize.ToString()); //string sql = string.Format("{0} with(nolock) where {1}", tableName, where); string sp = CompileSqlToSp(_DBAdapter.TemplatePage, condition, dic); CallBackDataReader reader; var db = GetDBHelper(DataAccessType.Read); reader = new CallBackDataReader(db.RunDataReader(sp), () => { return(GetOutParam <int>("count")); }, sp); ClearParame(); query1.ExecuteTime += db.ExecuteTime; return(reader); }
/// <summary> /// 返回动态对象 /// </summary> /// <param name="query"></param> /// <returns></returns> public override List <dynamic> QueryDynamic(LambdaQueryBase query) { if (query.SkipPage > 0) { //int count; //var reader = GetPageReader(query); //var list = reader.GetDataDynamic(out count); //query.MapingTime += reader.runTime; //query.RowCount = count; //return list; var list = SqlStopWatch.ReturnData(() => { return(GetPageReader(query)); }, (r) => { int count; var list2 = r.GetDataDynamic(out count); query.MapingTime += r.runTime; query.__RowCount = count; return(list2); }); return(list); } else { //var reader = GetQueryDynamicReader(query); //double runTime; //var list = Dynamic.DynamicObjConvert.DataReaderToDynamic(reader, out runTime); //query.MapingTime += runTime; //query.RowCount = list.Count; //return list; var list = SqlStopWatch.ReturnData(() => { return(GetQueryDynamicReader(query)); }, (r) => { double runTime; var list2 = Dynamic.DynamicObjConvert.DataReaderToDynamic(r.reader, out runTime); query.MapingTime += runTime; query.__RowCount = list2.Count; return(list2); }); 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(), 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); }
/// <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); } }
/// <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); } }
/// <summary> /// 返回动态对象 /// </summary> /// <param name="query"></param> /// <returns></returns> public override List <dynamic> QueryDynamic(LambdaQueryBase query) { if (query.SkipPage > 0) { int count; var reader = GetPageReader(query); var list = reader.GetDataDynamic(out count); query.MapingTime += reader.runTime; query.RowCount = count; return(list); } else { var reader = GetQueryDynamicReader(query); double runTime; var list = Dynamic.DynamicObjConvert.DataReaderToDynamic(reader, out runTime); query.MapingTime += runTime; 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(), 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); }
public override List <dynamic> QueryDynamic(LambdaQueryBase query) { throw new NotSupportedException("MongoDB暂未实现此方法"); }
/// <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); }
public override string GetRelationDeleteSql(string t1, string t2, string condition, LambdaQueryBase query) { string table = string.Format("{0} t1,{1} t2", KeyWordFormat(t1), KeyWordFormat(t2)); var where = query.__Relations.First().Value.condition; if (query.Condition.Length > 0) { where += string.Format(" and {0}", query.Condition); } string sql = string.Format("delete t1 from {0} where {1}", table, where); return(sql); }
/// <summary> /// 按是否能编译 /// </summary> /// <param name="query1"></param> /// <returns></returns> CallBackDataReader GetGroupPageReader(LambdaQueryBase query1) { //var query1 = query as RelationLambdaQuery<TModel>; if (_DBAdapter.CanCompileSP && query1.__CompileSp) { return(GetSpGroupPageReader(query1)); } CheckTableCreated(query1.__MainType); var condition = query1.GetQueryConditions(); var fields = query1.GetQueryFieldString(); if (!condition.Contains("group")) { throw new CRLException("缺少group语法"); } var rowOver = query1.__QueryOrderBy; if (string.IsNullOrEmpty(rowOver)) { throw new CRLException("Group分页需指定Group排序字段"); //var table = TypeCache.GetTable(typeof(T)); //rowOver = string.Format("t1.{0} desc", table.PrimaryKey.Name); } var sort1 = System.Text.RegularExpressions.Regex.Replace(rowOver, @"t\d\.", ""); condition = _DBAdapter.SqlFormat(condition); query1.FillParames(this); var pageIndex = query1.SkipPage; var pageSize = query1.TakeNum; pageIndex = pageIndex == 0 ? 1 : pageIndex; pageSize = pageSize == 0 ? 15 : pageSize; string countSql = string.Format("select count(*) from (select count(*) as a from {0}) t", condition); int count = Convert.ToInt32(__DbHelper.ExecScalar(countSql)); query1.ExecuteTime += __DbHelper.ExecuteTime; query1.RowCount = count; //if (count == 0) //{ // return null; //} int pageCount = (count + pageSize - 1) / pageSize; if (pageIndex > pageCount) { pageIndex = pageCount; } var start = pageSize * (pageIndex - 1) + 1; var end = start + pageSize - 1; string sql = _DBAdapter.PageSqlFormat(fields, rowOver, condition, start, end, ""); //System.Data.Common.DbDataReader reader; //reader = dbHelper.ExecDataReader(sql); var reader = new CallBackDataReader(__DbHelper.ExecDataReader(sql), () => { return(count); }); query1.ExecuteTime += __DbHelper.ExecuteTime; ClearParame(); return(reader); }
/// <summary> /// GROUP和是否编译判断 /// </summary> /// <param name="query1"></param> /// <returns></returns> internal CallBackDataReader GetPageReader(LambdaQueryBase query1) { if (query1.__GroupFields != null) { return(GetGroupPageReader(query1)); } if (_DBAdapter.CanCompileSP && query1.__CompileSp) { return(GetSpPageReader(query1)); } CheckTableCreated(query1.__MainType); //var fields = query.GetQueryFieldString(b => b.Length > 500 || b.PropertyType == typeof(byte[])); var fields = query1.GetQueryFieldString(); var rowOver = query1.GetOrder(); if (string.IsNullOrEmpty(rowOver)) { var table = TypeCache.GetTable(query1.__MainType); if (table.PrimaryKey == null) { throw new Exception("分页缺少默认排序字段"); } rowOver = string.Format("t1.{0} desc", table.PrimaryKey.MapingName); } //var orderBy = System.Text.RegularExpressions.Regex.Replace(rowOver, @"t\d\.", ""); rowOver = _DBAdapter.SqlFormat(rowOver); var orderBy = rowOver; var sb = new StringBuilder(); query1.GetQueryConditions(sb); var condition = sb.ToString(); condition = _DBAdapter.SqlFormat(condition); query1.FillParames(this); var pageIndex = query1.SkipPage; var pageSize = query1.TakeNum; pageIndex = pageIndex <= 0 ? 1 : pageIndex; pageSize = pageSize <= 0 ? 15 : pageSize; string countSql = string.Format("select count(*) {0}", condition); var db = GetDBHelper(DataAccessType.Read); int count = Convert.ToInt32(SqlStopWatch.ExecScalar(db, countSql)); query1.ExecuteTime += db.ExecuteTime; query1.__RowCount = count; if (count == 0) { return(null); } int pageCount = (count + pageSize - 1) / pageSize; if (pageIndex > pageCount) { pageIndex = pageCount; } var start = pageSize * (pageIndex - 1) + 1; var end = start + pageSize - 1; string sql = _DBAdapter.PageSqlFormat(db, fields, rowOver, condition, start, end, orderBy); var reader = new CallBackDataReader(db.ExecDataReader(sql), () => { return(count); }, sql); query1.ExecuteTime += db.ExecuteTime; ClearParame(); return(reader); }
public override List <TResult> QueryResult <TResult>(LambdaQueryBase query) { throw new NotSupportedException("MongoDB暂未实现此方法"); }
//public override List<TResult> QueryDynamic<TModel, TResult>(LambdaQuery.LambdaQuery<TModel> query) //{ // var result = GetDynamicResult(query); // var type = typeof(TResult); // var pro = type.GetProperties(); // var list = new List<TResult>(); // var reflection = ReflectionHelper.GetInfo<TResult>(); // foreach (var item in result) // { // var dict = item as IDictionary<string, object>; // var obj = (TResult)System.Activator.CreateInstance(type); // foreach (var f in pro) // { // string columnName = f.Name; // if (dict.ContainsKey(columnName)) // { // object value = dict[columnName]; // //f.SetValue(obj, value); // //var tuple = Tuple.GetCacheDelegate<TResult>(type, pro, columnName); // //tuple.SetValue(obj, value); // var access = reflection.GetAccessor(columnName); // access.Set((TResult)obj, value); // } // } // list.Add(obj); // } // return list; //} public override List <TResult> QueryResult <TResult>(LambdaQueryBase query) { throw new NotImplementedException(); }