diff --git a/src/JsonApiDotNetCore/Extensions/IQueryableExtensions.cs b/src/JsonApiDotNetCore/Extensions/IQueryableExtensions.cs index 2f66d34837..c52fc88bbc 100644 --- a/src/JsonApiDotNetCore/Extensions/IQueryableExtensions.cs +++ b/src/JsonApiDotNetCore/Extensions/IQueryableExtensions.cs @@ -247,7 +247,7 @@ private static IQueryable CallGenericWhereMethod(IQueryable CallGenericWhereMethod(IQueryable 1 var convertedValue = TypeHelper.ConvertType(filter.Value, property.PropertyType); - // {1} - right = Expression.Constant(convertedValue, property.PropertyType); + + right = CreateTupleAccessForConstantExpression(convertedValue, property.PropertyType); } var body = GetFilterExpressionLambda(left, right, filter.Operation); @@ -302,6 +302,31 @@ private static IQueryable CallGenericWhereMethod(IQueryable(value)), "Item1") + // Which represents the next C# code: + // Tuple.Create(value).Item1; + + MethodInfo tupleCreateMethod = typeof(Tuple).GetMethods() + .Single(m => m.Name == "Create" && m.IsGenericMethod && m.GetGenericArguments().Length == 1); + MethodInfo constructedTupleCreateMethod = tupleCreateMethod.MakeGenericMethod(type); + + ConstantExpression constantExpression = Expression.Constant(value, type); + + MethodCallExpression tupleCreateCall = Expression.Call(constructedTupleCreateMethod, constantExpression); + return Expression.Property(tupleCreateCall, "Item1"); + } + private static IQueryable CallGenericSelectMethod(IQueryable source, List columns) { var sourceBindings = new List();