private Expression GetResultExpression(Expression selectExpression, bool sourceIsQueryable, bool targetIsQueryable)
        {
            if (sourceIsQueryable && targetIsQueryable)
            {
                return(selectExpression);
            }

            if (!sourceIsQueryable && targetIsQueryable)
            {
                return(Expression.Call(
                           MethodFinder.GetAsQueryable(TargetValueType.GetQueryableItemType()),
                           selectExpression));
            }

            var toResultMethod = this.TargetValueType.IsArray ? MethodFinder.GetEnumerableToArray <TTargetValueItem>() : MethodFinder.GetEnumerableToList <TTargetValueItem>();

            return(Expression.Call(toResultMethod, selectExpression));
        }