diff --git a/src/Fluxera.Linq.Expressions/ExpressionExtensions.cs b/src/Fluxera.Linq.Expressions/ExpressionExtensions.cs
index 9d6793e..51ced55 100644
--- a/src/Fluxera.Linq.Expressions/ExpressionExtensions.cs
+++ b/src/Fluxera.Linq.Expressions/ExpressionExtensions.cs
@@ -20,11 +20,9 @@ public static class ExpressionExtensions
/// See Pete Montgomery's post here:
/// http://petemontgomery.wordpress.com/2008/08/07/caching-the-results-of-linq-queries/
///
- ///
- ///
///
///
- public static string ToExpressionString(this Expression> expression)
+ public static string ToExpressionString(this Expression expression)
{
if(expression is null)
{
@@ -43,6 +41,24 @@ public static string ToExpressionString(this Expression
+ /// Converts the given to a string representation.
+ ///
+ ///
+ /// See Pete Montgomery's post here:
+ /// http://petemontgomery.wordpress.com/2008/08/07/caching-the-results-of-linq-queries/
+ ///
+ ///
+ ///
+ ///
+ ///
+ public static string ToExpressionString(this Expression> expression)
+ {
+ Expression expr = expression;
+
+ return expr?.ToExpressionString();
+ }
+
///
/// Creates a that represents a bitwise AND operation.
///
diff --git a/tests/Fluxera.Linq.Expressions.UnitTests/ExpressionExtensionsTests.cs b/tests/Fluxera.Linq.Expressions.UnitTests/ExpressionExtensionsTests.cs
index 853a7b7..5bef314 100644
--- a/tests/Fluxera.Linq.Expressions.UnitTests/ExpressionExtensionsTests.cs
+++ b/tests/Fluxera.Linq.Expressions.UnitTests/ExpressionExtensionsTests.cs
@@ -90,5 +90,91 @@ public void ShouldCreateExpressionStringForDynamicSelectionExpression()
result.Should().NotBeNullOrWhiteSpace();
result.Should().Be("x => new DynamicAnonymousType0`1() {Name = x.Name}");
}
+
+ [Test]
+ public void ShouldCheckForEmpty_Untyped()
+ {
+ // Arrange
+ Expression> expression = x => x.Name;
+ Expression expr = expression;
+
+ // Act
+ string result = expr.ToExpressionString();
+
+ // Assert
+ result.Should().NotBeNullOrWhiteSpace();
+ }
+
+ [Test]
+ public void ShouldCreateExpressionStringForComplexPropertyExpression_Untyped()
+ {
+ // Arrange
+ Expression> expression = x => x.Name.StartsWith("O") && x.Name.EndsWith("l");
+ Expression expr = expression;
+
+ // Act
+ string result = expr.ToExpressionString();
+
+ // Assert
+ result.Should().NotBeNullOrWhiteSpace();
+ result.Should().Be("x => (x.Name.StartsWith(\"O\") AndAlso x.Name.EndsWith(\"l\"))");
+ }
+
+ [Test]
+ public void ShouldCreateExpressionStringForSimplePropertyExpression_Untyped()
+ {
+ // Arrange
+ Expression> expression = x => x.Name;
+ Expression expr = expression;
+
+ // Act
+ string result = expr.ToExpressionString();
+
+ // Assert
+ result.Should().NotBeNullOrWhiteSpace();
+ result.Should().Be("x => x.Name");
+ }
+
+ [Test]
+ public void ShouldCreateExpressionStringForSelectionExpression_Untyped()
+ {
+ // Arrange
+ Expression> expression = x => new { x.Name };
+ Expression expr = expression;
+
+ // Act
+ string result = expr.ToExpressionString();
+
+ // Assert
+ result.Should().NotBeNullOrWhiteSpace();
+ result.Should().Be("x => new <>f__AnonymousType0`1(Name = x.Name)");
+ }
+
+ [Test]
+ public void ShouldCreateExpressionStringForDynamicSelectionExpression_Untyped()
+ {
+ // Arrange
+ Type type = DynamicFactory.CreateType(("Name", typeof(string)));
+
+ PropertyInfo property = typeof(Person).GetProperty("Name");
+ PropertyInfo dynamicProperty = type.GetProperty("Name");
+
+ ParameterExpression parameter = Expression.Parameter(typeof(Person), "x");
+ MemberExpression propertyExpression = Expression.MakeMemberAccess(parameter, property);
+ MemberAssignment binding = Expression.Bind(dynamicProperty, propertyExpression);
+
+ NewExpression newExpression = Expression.New(type);
+ MemberInitExpression memberInitExpression = Expression.MemberInit(newExpression, binding);
+
+ Expression> expression = Expression.Lambda>(memberInitExpression, parameter);
+ Expression expr = expression;
+
+ // Act
+ string result = expr.ToExpressionString();
+
+ // Assert
+ result.Should().NotBeNullOrWhiteSpace();
+ result.Should().Be("x => new DynamicAnonymousType0`1() {Name = x.Name}");
+ }
}
}