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