Example #1
0
        public static IQueryable<T> GenerateByID<T>(this IAbstraXProviderService service, string id)
        {
            var queue = new Queue<string>();
            var parser = new XPathParser<string>();
            var builder = new XPathStringBuilder();

            parser.Parse(id, builder);

            var axisElement = builder.PartQueue.OfType<XPathElement>().Last();

            var method = service.GetType().GetMethods().Single(m => m.ReturnType.Name == "IQueryable`1" && m.GetParameters().Length == 0 && m.ReturnType.GetGenericArguments().Any(a => a.Name == axisElement.Text));

            service.LogGenerateByID(id, method);

            var results = (IQueryable<IBase>)method.Invoke(service, null);

            service.PostLogGenerateByID();

            return results.Where(b => b.ID == id).Cast<T>();
        }
Example #2
0
        public static string GetQueryMethodForID(this IAbstraXProviderService service, string id)
        {
            var baseObject = service.GenerateByID(id);
            var method = service.GetType().GetMethods().Single(m =>
            {
                var returnType = m.ReturnType;
                var args = returnType.GetGenericArguments();

                if (returnType.Name == "IQueryable`1" && args.Length == 1 && args.First().Name == baseObject.GetType().Name && m.GetParameters().Length == 0)
                {
                    return true;
                }
                else if (returnType.Name == baseObject.GetType().Name)
                {
                    return true;
                }
                else
                {
                    return false;
                }
            });

            return method.Name;
        }