public OguObjectCollection <T> QueryDescendants <T>(SchemaQueryType type, IOrganization parent, string prefix, int maxCount) where T : IOguObject
        {
            List <string> schemas = new List <string>(8);

            if ((type & SchemaQueryType.Users) == SchemaQueryType.Users)
            {
                schemas.Add("Users");
                CheckAssignable <T, IUser>();
            }

            if ((type & SchemaQueryType.Groups) == SchemaQueryType.Groups)
            {
                schemas.Add("Groups");
                CheckAssignable <T, IGroup>();
            }

            if ((type & SchemaQueryType.Organizations) == SchemaQueryType.Organizations)
            {
                schemas.Add("Organizations");
                CheckAssignable <T, IOrganization>();
            }

            var result = this.QueryDescendants <T>(parent, prefix, maxCount, schemas.ToArray());

            return(result);
        }
예제 #2
0
 /// <summary>
 /// 校验已知类型的参数规则
 /// </summary>
 /// <typeparam name="TAct">实际的类型</typeparam>
 /// <typeparam name="TExp">预期的类型</typeparam>
 /// <param name="actual">实际的类型</param>
 /// <param name="mask">位掩码</param>
 private void CheckSchema <TAct, TExp>(SchemaQueryType actual, SchemaQueryType mask)
 {
     if (((actual & mask) == mask))
     {
         if (typeof(TAct).IsAssignableFrom(typeof(TExp)) == false)
         {
             throw new InvalidCastException(string.Format("指定的类型和转换之间存在明显不兼容,{0}与{1}不兼容", typeof(TAct).Name, actual.ToString()));
         }
     }
 }
예제 #3
0
        private string cacheKeyHelper(SchemaQueryType query)
        {
            var keybuilder = new StringBuilder();

            keybuilder.Append(query.name);
            foreach (var parm in query.parameters.parameter)
            {
                if (parm.Text.Count > 0)
                {
                    keybuilder.Append(parm.Text.Flatten());
                }
            }

            return(keybuilder.ToString());
        }
예제 #4
0
 public OguObjectCollection <T> QueryDescendants <T>(SchemaQueryType type, IOrganization parent, string prefix, int maxCount) where T : IOguObject
 {
     return(parent.QueryChildren <T>(prefix, true, SearchLevel.SubTree, maxCount));
 }