/// <summary> /// 取得使用到的欄位集合。 /// </summary> /// <param name="tableDefine">資料表定義。</param> private GStringHashSet GetUseFields(GTableDefine tableDefine) { // 取得資料表定義 var useFieldSet = new GStringHashSet(); if (StrFunc.StrIsEmpty(this.SelectFields)) { // 包含所有欄位 foreach (GFieldDefine fieldDefine in tableDefine.Fields) { useFieldSet.Add(fieldDefine.FieldName); } } else { // 加入取回欄位 useFieldSet.Add(this.SelectFields, ","); // 加入篩選欄位 foreach (GFilterItem filterItem in this.FilterItems) { useFieldSet.Add(filterItem.FieldName); } // 加入排序欄位 foreach (GSortField sortField in this.SortFields) { useFieldSet.Add(sortField.FieldName); } } return(useFieldSet); }
/// <summary> /// 取得關連明細資料表使用欄位集合。 /// </summary> /// <param name="useFields">取得使用的欄位集合。</param> /// <param name="detailTableName">傳回明細資料表名稱。</param> private GStringHashSet GetUseDetailTableFields(GStringHashSet useFields, out string detailTableName) { GStringHashSet oUseFields; string sDetailTableName; string sTableName; string sFieldName; sDetailTableName = string.Empty; oUseFields = new GStringHashSet(); foreach (string fieldName in useFields) { if (StrFunc.StrContains(fieldName, ".")) { // 折解資料表及欄位名稱 StrFunc.StrSplitFieldName(fieldName, out sTableName, out sFieldName); // 主檔不能同時 Join 多個明細資料表 if (StrFunc.StrIsNotEmpty(sDetailTableName) && !StrFunc.SameText(sDetailTableName, sTableName)) { throw new GException("Master Table can't Join multi Detail Table"); } sDetailTableName = sTableName; oUseFields.Add(sFieldName); } } detailTableName = sDetailTableName; return(oUseFields); }
/// <summary> /// 取得主要資料表使用欄位集合。 /// </summary> /// <param name="useFields">使用欄位集合。</param> private GStringHashSet GetUseTableFields(GStringHashSet useFields) { var useFieldSet = new GStringHashSet(); foreach (string fieldName in useFields) { if (!StrFunc.StrContains(fieldName, ".")) { useFieldSet.Add(fieldName); } } return(useFieldSet); }
/// <summary> /// 取得關連取回欄位集合。 /// </summary> /// <param name="tableDefine">資料表定義。</param> /// <param name="linkFieldName">關連來源欄位。</param> /// <param name="useFields">使用到的欄位集合。</param> private GStringHashSet GetReturnFields(GTableDefine tableDefine, string linkFieldName, GStringHashSet useFields) { GStringHashSet oReturnFields; GFieldDefine oFieldDefine; oReturnFields = new GStringHashSet(); foreach (string fieldName in useFields) { oFieldDefine = tableDefine.Fields[fieldName]; if (oFieldDefine.FieldType == EFieldType.LinkField && StrFunc.SameText(oFieldDefine.LinkFieldName, linkFieldName)) { oReturnFields.Add(fieldName); } } return(oReturnFields); }