예제 #1
0
        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());
        }
예제 #2
0
        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);
            }
        }