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); }
/// <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())); } } }
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()); }
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)); }