diff --git a/src/Directory.Packages.props b/src/Directory.Packages.props
index c6031df8..9d998db8 100644
--- a/src/Directory.Packages.props
+++ b/src/Directory.Packages.props
@@ -22,8 +22,10 @@
+
+
diff --git a/src/Tests/ExpressionBuilderTests.BuildPredicate_Comparison_comparison=Contains.verified.txt b/src/Tests/ExpressionBuilderTests.BuildPredicate_Comparison_comparison=Contains.verified.txt
new file mode 100644
index 00000000..bcf356ce
--- /dev/null
+++ b/src/Tests/ExpressionBuilderTests.BuildPredicate_Comparison_comparison=Contains.verified.txt
@@ -0,0 +1,18 @@
+{
+ Type: Exception,
+ Message: Failed to build expression. Path: Member.Length, Comparison: Contains, Negate: False, ,
+ InnerException: {
+ $type: Exception,
+ Type: Exception,
+ Message: Cannot perform Contains on System.Int32.,
+ StackTrace:
+at WhereValidator.ValidateObject(Type propertyType, Comparison comparison)
+at WhereValidator.ValidateSingleObject(Type propertyType, Comparison comparison)
+at GraphQL.EntityFramework.ExpressionBuilder`1.GetExpression(String path, Comparison comparison, String[] values)
+at GraphQL.EntityFramework.ExpressionBuilder`1.MakePredicateBody(String path, Comparison comparison, String[] values, Boolean negate)
+ },
+ StackTrace:
+at GraphQL.EntityFramework.ExpressionBuilder`1.MakePredicateBody(String path, Comparison comparison, String[] values, Boolean negate)
+at GraphQL.EntityFramework.ExpressionBuilder`1.BuildPredicate(String path, Comparison comparison, String[] values, Boolean negate)
+at ExpressionBuilderTests.BuildPredicate_Comparison(Comparison comparison)
+}
\ No newline at end of file
diff --git a/src/Tests/ExpressionBuilderTests.BuildPredicate_Comparison_comparison=EndsWith.verified.txt b/src/Tests/ExpressionBuilderTests.BuildPredicate_Comparison_comparison=EndsWith.verified.txt
new file mode 100644
index 00000000..f9430192
--- /dev/null
+++ b/src/Tests/ExpressionBuilderTests.BuildPredicate_Comparison_comparison=EndsWith.verified.txt
@@ -0,0 +1,18 @@
+{
+ Type: Exception,
+ Message: Failed to build expression. Path: Member.Length, Comparison: EndsWith, Negate: False, ,
+ InnerException: {
+ $type: Exception,
+ Type: Exception,
+ Message: Cannot perform EndsWith on System.Int32.,
+ StackTrace:
+at WhereValidator.ValidateObject(Type propertyType, Comparison comparison)
+at WhereValidator.ValidateSingleObject(Type propertyType, Comparison comparison)
+at GraphQL.EntityFramework.ExpressionBuilder`1.GetExpression(String path, Comparison comparison, String[] values)
+at GraphQL.EntityFramework.ExpressionBuilder`1.MakePredicateBody(String path, Comparison comparison, String[] values, Boolean negate)
+ },
+ StackTrace:
+at GraphQL.EntityFramework.ExpressionBuilder`1.MakePredicateBody(String path, Comparison comparison, String[] values, Boolean negate)
+at GraphQL.EntityFramework.ExpressionBuilder`1.BuildPredicate(String path, Comparison comparison, String[] values, Boolean negate)
+at ExpressionBuilderTests.BuildPredicate_Comparison(Comparison comparison)
+}
\ No newline at end of file
diff --git a/src/Tests/ExpressionBuilderTests.BuildPredicate_Comparison_comparison=Equal.verified.txt b/src/Tests/ExpressionBuilderTests.BuildPredicate_Comparison_comparison=Equal.verified.txt
new file mode 100644
index 00000000..1f8c6d82
--- /dev/null
+++ b/src/Tests/ExpressionBuilderTests.BuildPredicate_Comparison_comparison=Equal.verified.txt
@@ -0,0 +1 @@
+Param_0 => (Param_0.Member.Length == 2)
\ No newline at end of file
diff --git a/src/Tests/ExpressionBuilderTests.BuildPredicate_Comparison_comparison=GreaterThan.verified.txt b/src/Tests/ExpressionBuilderTests.BuildPredicate_Comparison_comparison=GreaterThan.verified.txt
new file mode 100644
index 00000000..aa3be598
--- /dev/null
+++ b/src/Tests/ExpressionBuilderTests.BuildPredicate_Comparison_comparison=GreaterThan.verified.txt
@@ -0,0 +1 @@
+Param_0 => (Param_0.Member.Length > 2)
\ No newline at end of file
diff --git a/src/Tests/ExpressionBuilderTests.BuildPredicate_Comparison_comparison=GreaterThanOrEqual.verified.txt b/src/Tests/ExpressionBuilderTests.BuildPredicate_Comparison_comparison=GreaterThanOrEqual.verified.txt
new file mode 100644
index 00000000..bdcac522
--- /dev/null
+++ b/src/Tests/ExpressionBuilderTests.BuildPredicate_Comparison_comparison=GreaterThanOrEqual.verified.txt
@@ -0,0 +1 @@
+Param_0 => (Param_0.Member.Length >= 2)
\ No newline at end of file
diff --git a/src/Tests/ExpressionBuilderTests.BuildPredicate_Comparison_comparison=In.verified.txt b/src/Tests/ExpressionBuilderTests.BuildPredicate_Comparison_comparison=In.verified.txt
new file mode 100644
index 00000000..fc8b7157
--- /dev/null
+++ b/src/Tests/ExpressionBuilderTests.BuildPredicate_Comparison_comparison=In.verified.txt
@@ -0,0 +1 @@
+Param_0 => value(System.Collections.Generic.List`1[System.Int32]).Contains(Param_0.Member.Length)
\ No newline at end of file
diff --git a/src/Tests/ExpressionBuilderTests.BuildPredicate_Comparison_comparison=LessThan.verified.txt b/src/Tests/ExpressionBuilderTests.BuildPredicate_Comparison_comparison=LessThan.verified.txt
new file mode 100644
index 00000000..1ba184cb
--- /dev/null
+++ b/src/Tests/ExpressionBuilderTests.BuildPredicate_Comparison_comparison=LessThan.verified.txt
@@ -0,0 +1 @@
+Param_0 => (Param_0.Member.Length < 2)
\ No newline at end of file
diff --git a/src/Tests/ExpressionBuilderTests.BuildPredicate_Comparison_comparison=LessThanOrEqual.verified.txt b/src/Tests/ExpressionBuilderTests.BuildPredicate_Comparison_comparison=LessThanOrEqual.verified.txt
new file mode 100644
index 00000000..9db40764
--- /dev/null
+++ b/src/Tests/ExpressionBuilderTests.BuildPredicate_Comparison_comparison=LessThanOrEqual.verified.txt
@@ -0,0 +1 @@
+Param_0 => (Param_0.Member.Length <= 2)
\ No newline at end of file
diff --git a/src/Tests/ExpressionBuilderTests.BuildPredicate_Comparison_comparison=Like.verified.txt b/src/Tests/ExpressionBuilderTests.BuildPredicate_Comparison_comparison=Like.verified.txt
new file mode 100644
index 00000000..c4aee7db
--- /dev/null
+++ b/src/Tests/ExpressionBuilderTests.BuildPredicate_Comparison_comparison=Like.verified.txt
@@ -0,0 +1,18 @@
+{
+ Type: Exception,
+ Message: Failed to build expression. Path: Member.Length, Comparison: Like, Negate: False, ,
+ InnerException: {
+ $type: Exception,
+ Type: Exception,
+ Message: Cannot perform Like on System.Int32.,
+ StackTrace:
+at WhereValidator.ValidateObject(Type propertyType, Comparison comparison)
+at WhereValidator.ValidateSingleObject(Type propertyType, Comparison comparison)
+at GraphQL.EntityFramework.ExpressionBuilder`1.GetExpression(String path, Comparison comparison, String[] values)
+at GraphQL.EntityFramework.ExpressionBuilder`1.MakePredicateBody(String path, Comparison comparison, String[] values, Boolean negate)
+ },
+ StackTrace:
+at GraphQL.EntityFramework.ExpressionBuilder`1.MakePredicateBody(String path, Comparison comparison, String[] values, Boolean negate)
+at GraphQL.EntityFramework.ExpressionBuilder`1.BuildPredicate(String path, Comparison comparison, String[] values, Boolean negate)
+at ExpressionBuilderTests.BuildPredicate_Comparison(Comparison comparison)
+}
\ No newline at end of file
diff --git a/src/Tests/ExpressionBuilderTests.BuildPredicate_Comparison_comparison=NotEqual.verified.txt b/src/Tests/ExpressionBuilderTests.BuildPredicate_Comparison_comparison=NotEqual.verified.txt
new file mode 100644
index 00000000..03dc6c9f
--- /dev/null
+++ b/src/Tests/ExpressionBuilderTests.BuildPredicate_Comparison_comparison=NotEqual.verified.txt
@@ -0,0 +1 @@
+Param_0 => (Param_0.Member.Length != 2)
\ No newline at end of file
diff --git a/src/Tests/ExpressionBuilderTests.BuildPredicate_Comparison_comparison=NotIn.verified.txt b/src/Tests/ExpressionBuilderTests.BuildPredicate_Comparison_comparison=NotIn.verified.txt
new file mode 100644
index 00000000..eb7bd8e7
--- /dev/null
+++ b/src/Tests/ExpressionBuilderTests.BuildPredicate_Comparison_comparison=NotIn.verified.txt
@@ -0,0 +1 @@
+Param_0 => Not(value(System.Collections.Generic.List`1[System.Int32]).Contains(Param_0.Member.Length))
\ No newline at end of file
diff --git a/src/Tests/ExpressionBuilderTests.BuildPredicate_Comparison_comparison=StartsWith.verified.txt b/src/Tests/ExpressionBuilderTests.BuildPredicate_Comparison_comparison=StartsWith.verified.txt
new file mode 100644
index 00000000..a69eb005
--- /dev/null
+++ b/src/Tests/ExpressionBuilderTests.BuildPredicate_Comparison_comparison=StartsWith.verified.txt
@@ -0,0 +1,18 @@
+{
+ Type: Exception,
+ Message: Failed to build expression. Path: Member.Length, Comparison: StartsWith, Negate: False, ,
+ InnerException: {
+ $type: Exception,
+ Type: Exception,
+ Message: Cannot perform StartsWith on System.Int32.,
+ StackTrace:
+at WhereValidator.ValidateObject(Type propertyType, Comparison comparison)
+at WhereValidator.ValidateSingleObject(Type propertyType, Comparison comparison)
+at GraphQL.EntityFramework.ExpressionBuilder`1.GetExpression(String path, Comparison comparison, String[] values)
+at GraphQL.EntityFramework.ExpressionBuilder`1.MakePredicateBody(String path, Comparison comparison, String[] values, Boolean negate)
+ },
+ StackTrace:
+at GraphQL.EntityFramework.ExpressionBuilder`1.MakePredicateBody(String path, Comparison comparison, String[] values, Boolean negate)
+at GraphQL.EntityFramework.ExpressionBuilder`1.BuildPredicate(String path, Comparison comparison, String[] values, Boolean negate)
+at ExpressionBuilderTests.BuildPredicate_Comparison(Comparison comparison)
+}
\ No newline at end of file
diff --git a/src/Tests/ExpressionBuilderTests.cs b/src/Tests/ExpressionBuilderTests.cs
index 19dcba47..c70111d8 100644
--- a/src/Tests/ExpressionBuilderTests.cs
+++ b/src/Tests/ExpressionBuilderTests.cs
@@ -1,5 +1,21 @@
public class ExpressionBuilderTests
{
+ [Theory, CombinatorialData]
+ public Task BuildPredicate_Comparison(Comparison comparison)
+ {
+ object result;
+ try
+ {
+ result = ExpressionBuilder.BuildPredicate("Member.Length", comparison, ["2"]);
+ }
+ catch (Exception exception)
+ {
+ result = exception;
+ }
+
+ return Verify(result);
+ }
+
public class Target
{
public string? Member { get; set; }
diff --git a/src/Tests/Tests.csproj b/src/Tests/Tests.csproj
index 326097c1..d690b44c 100644
--- a/src/Tests/Tests.csproj
+++ b/src/Tests/Tests.csproj
@@ -10,7 +10,9 @@
+
+