Example #1
0
        /// <summary>
        /// From the serializable.
        /// </summary>
        /// <param name="lambdaExpressionRepresentation">The lambda expression.</param>
        /// <returns>
        /// Converted expression.
        /// </returns>
        public static LambdaExpression FromRepresentation(
            this LambdaExpressionRepresentation lambdaExpressionRepresentation)
        {
            if (lambdaExpressionRepresentation == null)
            {
                throw new ArgumentNullException(nameof(lambdaExpressionRepresentation));
            }

            var type = lambdaExpressionRepresentation.Type.ResolveFromLoadedTypes();

            var body = lambdaExpressionRepresentation.Body.FromRepresentation();

            var parameters = lambdaExpressionRepresentation.Parameters.FromRepresentation().ToList();

            var allParametersFromBody = body.VisitAllNodes().Where(_ => _ is ParameterExpression).Cast <ParameterExpression>().ToList();

            var matchingParametersFromBody = new List <ParameterExpression>();

            foreach (var parameter in parameters)
            {
                var parameterFromBody = allParametersFromBody.SingleOrDefault(allParameter =>
                                                                              parameter.Name == allParameter.Name && parameter.Type == allParameter.Type);

                if (parameterFromBody != null)
                {
                    matchingParametersFromBody.Add(parameterFromBody);
                }
            }

            var result = matchingParametersFromBody.Any()
                ? Expression.Lambda(type, body, matchingParametersFromBody)
                : Expression.Lambda(type, body);

            return(result);
        }
Example #2
0
        /// <summary>
        /// Converts to serializable.
        /// </summary>
        /// <param name="lambdaExpression">The lambda expression.</param>
        /// <returns>
        /// Serializable expression.
        /// </returns>
        public static LambdaExpressionRepresentation ToRepresentation(
            this LambdaExpression lambdaExpression)
        {
            if (lambdaExpression == null)
            {
                throw new ArgumentNullException(nameof(lambdaExpression));
            }

            var type = lambdaExpression.Type.ToRepresentation();

            var body = lambdaExpression.Body.ToRepresentation();

            var parameters = lambdaExpression.Parameters.ToRepresentation();

            var result = new LambdaExpressionRepresentation(type, body, parameters);

            return(result);
        }