/// <summary> /// 对单表执行查询单条记录操作 /// </summary> /// <typeparam name="T"></typeparam> /// <param name="parse2QuerySql">生成完整SQL语句的函数</param> /// <param name="queryParam">查询子句集合</param> /// <returns></returns> protected T QuerySingle <T>(Parse2QuerySQL parse2QuerySql, QueryParam queryParam, string cacheKey) where T : class { List <T> lst = Query <T>(parse2QuerySql, queryParam, cacheKey); if (lst == null || lst.Count == 0) { return(null); } return(lst[0]); }
/// <summary> /// 对单表执行查询操作 /// </summary> /// <typeparam name="T"></typeparam> /// <param name="parse2QuerySql">生成完整SQL语句的函数</param> /// <param name="queryParam">查询子句集合</param> /// <param name="cacheKey">缓存键</param> /// <returns></returns> protected List <T> Query <T>(Parse2QuerySQL parse2QuerySql, QueryParam queryParam, string cacheKey) where T : class { if (queryParam.PropFns == null) { queryParam.PropFns = new Dictionary <string, DBFn>(); } List <T> recs = new List <T>(); // 组装Sql Dictionary <string, string> tblNames = new Dictionary <string, string>(); Type modelType = typeof(T); // 获取表名 FilterTbls(tblNames, modelType); StringBuilder fromClause = new StringBuilder(); // FROM子句 StringBuilder cols = new StringBuilder(); // 字段名称 PropertyInfo[] propertyInfos = modelType.GetProperties(BindingFlags.Public | BindingFlags.Instance); if (StringHelper.IsNullOrWhiteSpace(cacheKey) || !cacheQuerySQL.ContainsKey(cacheKey)) { RelAttr[] relAttrs = (RelAttr[])modelType.GetCustomAttributes(typeof(RelAttr), true); DistinctAttr[] distinctAttrs = (DistinctAttr[])modelType.GetCustomAttributes(typeof(DistinctAttr), true); GetFormAndSelectClause(fromClause, cols, propertyInfos, tblNames, queryParam.ExcludedProps, queryParam.PropFns, relAttrs, distinctAttrs); } SQLQueryClause sqlQueryClause = new SQLQueryClause(); sqlQueryClause.Select = cols.ToString(); sqlQueryClause.From = string.Format(" {0} ", fromClause.ToString()); sqlQueryClause.Where = string.Format(" {0} ", Parse2Sql(queryParam.Where, propertyInfos)); sqlQueryClause.OrderBy = string.Format(" {0} ", Parse2Sql(queryParam.OrderBy, propertyInfos)); sqlQueryClause.GroupBy = string.Format(" {0} ", Parse2Sql(queryParam.GroupBy, propertyInfos)); sqlQueryClause.Having = string.Format(" {0} ", Parse2Sql(queryParam.Having, propertyInfos)); string sql = parse2QuerySql(sqlQueryClause, cacheQuerySQL, cacheKey); if (m_IsDebug) { Logger.WriteMsg2LogFile(sql); } IDataReader reader = m_Db.ExecReader(sql, queryParam.ParamInfos, CommandBehavior.CloseConnection); if (null != reader) { try { ConvertRO2DO <T>(reader, recs, queryParam.ExcludedProps); } catch (Exception ex) { Logger.WriteEx2LogFile(ex); } finally { if (!reader.IsClosed) { reader.Close(); } } } return(recs); }