public static T GetModelByGuid <T>(string guid) where T : BaseModel, new() { try { string modelTypeStr = typeof(T).Name; if (AppSettings.IsEnableRedis) { List <T> list = RedisReadExHelper.SetSearch <T>(modelTypeStr, 0, guid, 10000); return(list.Count == 0 ? Service.DBClientService.GetModelByGuid <T>(guid) : list[0]); } return(Service.DBClientService.GetModelByGuid <T>(guid)); } catch (Exception ex) {//如果出现异常,将从数据库中查询 LogHelper.ErrorLog(ex.ToString()); return(Service.DBClientService.GetModelByGuid <T>(guid)); } }
/// <summary> /// 返回LIST /// </summary> /// <typeparam name="T"></typeparam> /// <param name="exp"></param> /// <returns></returns> public List <T> GetList <T>(Expression <Func <T, bool> > exp) where T : class, new() { string modelTypeStr = typeof(T).Name; var IsExist = IsExist <BsRedisTable>("TableName=@0", modelTypeStr); if (modelTypeStr.ToUpper().StartsWith("BS") || modelTypeStr.ToUpper().StartsWith("GBL") || IsExist) {//如果是基础数据,从本地redis中获取数据 //构建pattern string pattern = ""; pattern = GetExpPattern <T>(exp.ToString(), modelTypeStr); if (pattern != "") {//pattern如果为空,将从数据库中查询 List <T> list = RedisReadExHelper.SetSearch <T>(modelTypeStr, 0, pattern, 10000); return(list); } } IQueryable <T> _dal = DataRepository().GetQueryable <T>(); return(_dal.Where(exp).ToList()); }
/// <summary> /// 返回整表数据 /// </summary> /// <typeparam name="T"></typeparam> /// <returns></returns> public static List <T> GetAllList <T>() where T : class, new() { try { string modelTypeStr = typeof(T).Name; if (AppSettings.IsEnableRedis) { List <T> list = RedisReadExHelper.RetrieveSet <T>(modelTypeStr); return(list.Count == 0 ? Service.DBClientService.GetAllList <T>() : list); } else { return(Service.DBClientService.GetAllList <T>()); } } catch (Exception ex) { LogHelper.ErrorLog(ex.ToString()); return(new List <T>()); } }
/// <summary> /// 返回 业务表 整表数据 该方法仅仅用于业务表的取缓存 /// </summary> /// <typeparam name="T"></typeparam> /// <param name="where"></param> /// <param name="arr"></param> /// <returns></returns> public static List <T> GetOuList <T>(string where, params object[] arr) where T : class, new() { string modelTypeStr = typeof(T).Name; try { //构建pattern if (AppSettings.IsEnableRedis) { string pattern = GetPattern <T>(where, modelTypeStr, arr); if (pattern != "") {//pattern如果为空,将从数据库中查询 List <T> list = RedisReadExHelper.SetSearch <T>(modelTypeStr, 0, pattern, 10000); return(list); } } return(Service.DBClientService.GetList <T>(where, arr)); } catch (Exception ex) {//如果出现异常,将从数据库中查询 LogHelper.ErrorLog(ex.ToString()); return(Service.DBClientService.GetList <T>(where, arr)); } }
internal string GetExpPattern <T>(string where, string modelTypeStr) where T : class, new() { string pattern = ""; foreach (string expType in _expTypes) { if (where.Contains(expType)) { return(""); } } where = where.Substring(3, where.Length - 3); /* * 获取redis中的表的查询字段,eg:HospitalID,Name,CareGroupId,DocLevId,LevelId,IsActive;其中HospitalID,Name,IsActive是很多基础表都有的字段, * 很多表的查询是基于这三个字段进行查询,中间的那几个字段是一些外键,在二级联动、三级联动中可能会用到。 */ string redisSearchConditionStr = RedisReadExHelper.GetHashKeyValue(AppSettings.RedisDefaultKey, modelTypeStr); string[] fileArr = new string[10]; string[] valueArr = new string[10]; if (redisSearchConditionStr != null) { //在redis中有记录查询条件 string[] redisSearchConditionKeys = redisSearchConditionStr.Split(','); string keys = "RedisConditionValus"; //pattern中的key string values = ""; //pattern中的value //通过正则表达式分析where语句 Regex rege = new Regex(@"[A-Za-z].[A-Za-z0-9]+(\s)?=(\s)?(\S)+"); MatchCollection Matches = rege.Matches(where); //t.Name = "张三" t.ClassName= "四(2)班" bool isAllContain = true; //Name,ClassName是否都包含在redisSearchConditionStr中,默认为true int i = 0; foreach (Match NextMatch in Matches) { string str = NextMatch.Groups[0].Value; int k = str.IndexOf("="); string file = str.Substring(0, k).Trim().Substring(2); //去掉空格和t. eg:Name string fileValue = str.Substring(k + 1).Trim(); //eg:\"张三\" fileValue = fileValue.Trim(new char[] { '\"' }); //eg:张三 valueArr[i] = fileValue; fileArr[i] = file; i++; if (!redisSearchConditionStr.Contains(file)) { isAllContain = false; break; } } if (!isAllContain) { if (where.Contains("IsActive") && where.Length < 14) { isAllContain = true;//只有IsActive一个查询条件的情况 } } //下面将结合where和redisSearchConditionKeys构建pattern GenerateExpPattern <T>(where, fileArr, valueArr, ref pattern, redisSearchConditionKeys, keys, ref values, isAllContain); } else {//在redis中没有记录查询条件 if (valueArr.Length == 1) { if (where.Contains("IsActive")) //eg:"t => t.IsActive AndAlso t.ClassName = \"四(2)班\"" { return(""); } //下面处理形如:"t => t.IsActive AndAlso t.ClassName = \"四(2)班\"" string key = fileArr[0]; PropertyInfo propertyInfo = typeof(T).GetProperty(key, BindingFlags.Public | BindingFlags.Instance | BindingFlags.IgnoreCase); if (propertyInfo != null) { if (propertyInfo.PropertyType.Name == "String") { pattern = "\"" + key + "\":\"" + valueArr[0].ToString() + "\""; } else { pattern = "\"" + key + "\":" + valueArr[0].ToString() + ""; } } } } return(pattern); }