public static string GetQueryData(string progId, LibQueryCondition condition, string prefix = "A", bool useRelativeField = true) { if (condition == null) { return(string.Empty); } StringBuilder builder = new StringBuilder(); LibSqlModel sqlModel = LibSqlModelCache.Default.GetSqlModel(progId); if (sqlModel == null) { throw new ArgumentNullException("sqlModel", "GetQueryData方法解析的progId取不到sqlModel"); } LibSqlModelTable table = (LibSqlModelTable)sqlModel.Tables[0]; foreach (LibQueryField queryField in condition.QueryFields) { if (!table.Columns.Contains(queryField.Name)) { continue; } LibSqlModelColumn col = (LibSqlModelColumn)table.Columns[queryField.Name]; if (col.ExtendedProperties.ContainsKey(FieldProperty.FieldType)) { FieldType fieldType = (FieldType)col.ExtendedProperties[FieldProperty.FieldType]; if (FieldType.Virtual == fieldType) { continue; } if (!useRelativeField && FieldType.Relative == fieldType) { continue; } } LibDataType dataType = (LibDataType)col.ExtendedProperties[FieldProperty.DataType]; BuildQueryStr(dataType, queryField, builder, prefix, true, string.Empty); //加入权限 if (condition.PowerQueryFieldDic.ContainsKey(queryField.Name)) { BuildPowserQueryStr(dataType, condition.PowerQueryFieldDic[queryField.Name], builder, prefix, true, string.Empty); } } if (builder.Length > 0) { builder.Remove(builder.Length - 4, 4); } return(builder.ToString()); }
private void MergeQueryField(string progId, LibPermission curPermission, LibPermission otherPermission) { LibSqlModel sqlModel = null; LibSqlModelTable table = null; List <string> removeList = new List <string>(); foreach (var item in curPermission.QueryFieldDic) { if (otherPermission.QueryFieldDic.ContainsKey(item.Key)) { LibQueryField other = otherPermission.QueryFieldDic[item.Key][0]; bool exist = false; foreach (var subItem in item.Value) { if (table == null) { sqlModel = LibSqlModelCache.Default.GetSqlModel(progId); if (sqlModel != null) { table = (LibSqlModelTable)sqlModel.Tables[0]; } } if (table != null) { LibSqlModelColumn col = (LibSqlModelColumn)table.Columns[item.Key]; LibDataType dataType = (LibDataType)col.ExtendedProperties[FieldProperty.DataType]; exist = LibQueryConditionParser.GetQueryFieldStr(dataType, subItem).CompareTo(LibQueryConditionParser.GetQueryFieldStr(dataType, other)) == 0; if (exist) { break; } } } if (!exist) { item.Value.Add(other); } } else { removeList.Add(item.Key); } } foreach (var item in removeList) { curPermission.QueryFieldDic.Remove(item); } }