From 6d71a298ebe18f9d7a893eea0e694769575c2a4e Mon Sep 17 00:00:00 2001 From: "d.galugis" Date: Fri, 6 Mar 2020 14:08:49 +0100 Subject: [PATCH] Add operators : Not Like, Start With, Not Start with, End With, Not End With --- .../Extensions/IQueryableExtensions.cs | 23 ++++++++++++++++++- .../Internal/Query/FilterOperations.cs | 7 +++++- 2 files changed, 28 insertions(+), 2 deletions(-) diff --git a/src/JsonApiDotNetCore/Extensions/IQueryableExtensions.cs b/src/JsonApiDotNetCore/Extensions/IQueryableExtensions.cs index c52fc88bbc..daf6e07eb3 100644 --- a/src/JsonApiDotNetCore/Extensions/IQueryableExtensions.cs +++ b/src/JsonApiDotNetCore/Extensions/IQueryableExtensions.cs @@ -149,7 +149,28 @@ private static Expression GetFilterExpressionLambda(Expression left, Expression body = Expression.GreaterThanOrEqual(left, right); break; case FilterOperation.like: - body = Expression.Call(left, "Contains", null, right); + case FilterOperation.notlike: + body = Expression.Call(left, nameof(string.Contains), null, right); + if(operation== FilterOperation.notlike) + { + body = Expression.Not(body); + } + break; + case FilterOperation.sw: + case FilterOperation.notsw: + body = Expression.Call(left, nameof(string.StartsWith), null, right); + if (operation == FilterOperation.notsw) + { + body = Expression.Not(body); + } + break; + case FilterOperation.ew: + case FilterOperation.notew: + body = Expression.Call(left, nameof(string.EndsWith), null, right); + if (operation == FilterOperation.notew) + { + body = Expression.Not(body); + } break; // {model.Id != 1} case FilterOperation.ne: diff --git a/src/JsonApiDotNetCore/Internal/Query/FilterOperations.cs b/src/JsonApiDotNetCore/Internal/Query/FilterOperations.cs index aee022cd20..dcc8e44c65 100644 --- a/src/JsonApiDotNetCore/Internal/Query/FilterOperations.cs +++ b/src/JsonApiDotNetCore/Internal/Query/FilterOperations.cs @@ -13,6 +13,11 @@ public enum FilterOperation @in = 7, // prefix with @ to use keyword nin = 8, isnull = 9, - isnotnull = 10 + isnotnull = 10, + notlike = 11, + sw = 12, //start with + notsw = 13, //doesn't start with + ew = 14, // end with, + notew = 15 // doesn't end with } }