diff --git a/src/DNX.Extensions/Reflection/ExpressionExtensions.cs b/src/DNX.Extensions/Reflection/ExpressionExtensions.cs
new file mode 100644
index 0000000..88281c6
--- /dev/null
+++ b/src/DNX.Extensions/Reflection/ExpressionExtensions.cs
@@ -0,0 +1,148 @@
+using System;
+using System.Linq.Expressions;
+
+namespace DNX.Extensions.Reflection
+{
+ ///
+ /// Class ExpressionExtensions.
+ ///
+ public static class ExpressionExtensions
+ {
+ ///
+ /// Determines whether the func is a member expression
+ ///
+ ///
+ /// The func.
+ ///
+ public static bool IsMemberExpression(this Expression> func)
+ {
+ return func.Body is MemberExpression;
+ }
+
+ ///
+ /// Determines whether the action is a member expression
+ ///
+ ///
+ /// The action.
+ ///
+ public static bool IsMemberExpression(this Expression action)
+ {
+ return action.Body is MemberExpression;
+ }
+
+ ///
+ /// Determines whether the func is a lambda expression
+ ///
+ ///
+ /// The func.
+ ///
+ public static bool IsLambdaExpression(Expression> func)
+ {
+ return func.Body is LambdaExpression;
+ }
+
+ ///
+ /// Determines whether the action is a lambda expression
+ ///
+ ///
+ /// The action.
+ ///
+ public static bool IsLambdaExpression(Expression> action)
+ {
+ return action.Body is LambdaExpression;
+ }
+
+ ///
+ /// Determines whether the func is a unary expression
+ ///
+ ///
+ /// The func.
+ ///
+ public static bool IsUnaryExpression(Expression> func)
+ {
+ var unaryExpression = func.Body as UnaryExpression;
+
+ return unaryExpression != null;
+ }
+
+ ///
+ /// Determines whether the action is a unary expression
+ ///
+ ///
+ /// The action.
+ ///
+ public static bool IsUnaryExpression(Expression> action)
+ {
+ var unaryExpression = action.Body as UnaryExpression;
+
+ return unaryExpression != null;
+ }
+
+ ///
+ /// Gets the name of the member expression.
+ ///
+ ///
+ /// The func.
+ ///
+ public static string GetMemberName(Expression> func)
+ {
+ var memberExpression = func.Body as MemberExpression;
+
+ return memberExpression?.Member.Name;
+ }
+
+ ///
+ /// Gets the name of the lambda expression.
+ ///
+ ///
+ /// The exp.
+ ///
+ public static string GetLambdaName(Expression> exp)
+ {
+ var lambdaExpression = exp.Body as LambdaExpression;
+
+ return lambdaExpression?.Name;
+ }
+
+ ///
+ /// Gets the name of the unary expression.
+ ///
+ ///
+ /// The exp.
+ ///
+ public static string GetUnaryName(Expression> exp)
+ {
+ var unaryExpression = exp.Body as UnaryExpression; //((UnaryExpression)exp.Body).Operand;
+
+ var operand = unaryExpression?.Operand as MemberExpression;
+
+ return operand?.Member.Name;
+ }
+
+ ///
+ /// Gets the name of the expression.
+ ///
+ ///
+ /// The exp.
+ ///
+ public static string GetExpressionName(Expression> exp)
+ {
+ if (IsMemberExpression(exp))
+ {
+ return GetMemberName(exp);
+ }
+
+ if (IsLambdaExpression(exp))
+ {
+ return GetLambdaName(exp);
+ }
+
+ if (IsUnaryExpression(exp))
+ {
+ return GetUnaryName(exp);
+ }
+
+ return null;
+ }
+ }
+}
diff --git a/tests/DNX.Extensions.Tests/Reflection/ExpressionExtensionsTests.cs b/tests/DNX.Extensions.Tests/Reflection/ExpressionExtensionsTests.cs
new file mode 100644
index 0000000..3279413
--- /dev/null
+++ b/tests/DNX.Extensions.Tests/Reflection/ExpressionExtensionsTests.cs
@@ -0,0 +1,59 @@
+using DNX.Extensions.Reflection;
+using FluentAssertions;
+using Xunit;
+
+#pragma warning disable xUnit1044 // TestData not serializable
+
+namespace DNX.Extensions.Tests.Reflection;
+
+public class ExpressionExtensionsTests
+{
+ // TODO: Not sure how to test these
+
+
+
+
+ [Fact]
+ public void IsMemberExpression_func_Tests()
+ {
+ ExpressionExtensions.IsMemberExpression(() => BooleanFunc()).Should().BeFalse();
+ ExpressionExtensions.IsMemberExpression(() => StringFunc()).Should().BeFalse();
+ ExpressionExtensions.IsMemberExpression(() => Int32Func()).Should().BeFalse();
+ ExpressionExtensions.IsMemberExpression(() => DoubleFunc()).Should().BeFalse();
+ }
+
+ [Fact]
+ public void IsMemberExpression_action_Tests()
+ {
+ // TODO: This looks wrong
+ ExpressionExtensions.IsMemberExpression