예제 #1
0
        public object Execute(Expression expression)
        {
            var visitor = new SalesforceVisitor(NamingConvention, SelectType);
            var cmd     = visitor.Translate(PartialEvaluator.Eval(expression));

            switch (visitor.QueryType)
            {
            case QueryTypeEnum.FirstOrDefault:
                return(ProduceAsyncEnumerable(cmd).FirstOrDefault());

            case QueryTypeEnum.First:
                return(ProduceAsyncEnumerable(cmd).First());

            case QueryTypeEnum.Single:
                return(ProduceAsyncEnumerable(cmd).Single());

            case QueryTypeEnum.SingleOrDefault:
                return(ProduceAsyncEnumerable(cmd).SingleOrDefault());

            case QueryTypeEnum.Count:
                return(ProduceCountAsync(cmd));

            case QueryTypeEnum.Any:
                return(ProduceCountAsync(cmd).ContinueWith(task => task.Result > 0));

            case QueryTypeEnum.List:
                return(ProduceAsyncEnumerable(cmd).ToList());

//                    var argument = typeof(TResult).GetGenericArguments()[0];
//
//                    var method = GetType().GetMethod("ProduceAsyncEnumerable", BindingFlags.Instance | BindingFlags.NonPublic).MakeGenericMethod(argument);
//                    var asyncEnumerable = method.Invoke(this, new object[]{cmd});
//
//
//                    var enumerabletype = typeof(IAsyncEnumerable<>).MakeGenericType(argument);
//                    var toList = GetGenericMethod(typeof(AsyncEnumerable), "ToList", typeof(IAsyncEnumerable<>)).MakeGenericMethod(argument);
//
//                    var result = (Task<TResult>) toList.Invoke(null, new [] {asyncEnumerable});
//
//                    MethodInfo GetGenericMethod(Type type, string name, params Type[] argumentTypes)
//                    {
//                        var methods = type.GetTypeInfo().GetMember("ToList").OfType<MethodInfo>().ToList();
//
//                        return methods.FirstOrDefault(m =>
//                        {
//                            var parameters = m.GetParameters();
//
//                            if (parameters.Length != argumentTypes.Length)
//                                return false;
//
//                            for (var i = 0; i < parameters.Length; i++)
//                            {
//                                var parameterType = parameters[i].ParameterType;
//
//                                if (parameterType.IsGenericType)
//                                    parameterType = parameterType.GetGenericTypeDefinition();
//
//                                if (parameterType != argumentTypes[i])
//                                    return false;
//                            }
//
//                            return true;
//                        });
//                    }

            case QueryTypeEnum.Enumerator:
            default:
                return(Task.FromResult(ProduceAsyncEnumerator(cmd)));
            }
        }
예제 #2
0
        public string ToString(Expression expression)
        {
            var visitor = new SalesforceVisitor(NamingConvention, SelectType);

            return(visitor.Translate(PartialEvaluator.Eval(expression)));
        }