Skip to content

Commit 819bda8

Browse files
authored
fix query predicate bug for NotEqual expression type (#399)
1 parent 8f0e204 commit 819bda8

File tree

2 files changed

+21
-2
lines changed

2 files changed

+21
-2
lines changed

src/Redis.OM/Aggregation/AggregationPredicates/QueryPredicate.cs

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -148,7 +148,7 @@ protected override void SplitBinaryExpression(BinaryExpression expression, Stack
148148
}
149149
}
150150

151-
private static string BuildEqualityPredicate(MemberInfo member, ConstantExpression expression, string memberStr)
151+
private static string BuildEqualityPredicate(MemberInfo member, ConstantExpression expression, string memberStr, bool negated = false)
152152
{
153153
var sb = new StringBuilder();
154154
var fieldAttribute = member.GetCustomAttribute<SearchFieldAttribute>();
@@ -157,6 +157,11 @@ private static string BuildEqualityPredicate(MemberInfo member, ConstantExpressi
157157
throw new InvalidOperationException("Searches can only be performed on fields marked with a RedisFieldAttribute with the SearchFieldType not set to None");
158158
}
159159

160+
if (negated)
161+
{
162+
sb.Append("-");
163+
}
164+
160165
sb.Append($"{memberStr}:");
161166
var searchFieldType = fieldAttribute.SearchFieldType != SearchFieldType.INDEXED
162167
? fieldAttribute.SearchFieldType
@@ -189,7 +194,7 @@ private string BuildQueryPredicate(ExpressionType expType, MemberExpression memb
189194
ExpressionType.GreaterThanOrEqual => $"{memberStr}:[{constExpression.Value} inf]",
190195
ExpressionType.LessThanOrEqual => $"{memberStr}:[-inf {constExpression.Value}]",
191196
ExpressionType.Equal => BuildEqualityPredicate(member.Member, constExpression, memberStr),
192-
ExpressionType.NotEqual => $"{memberStr} : -{{{constExpression.Value}}}",
197+
ExpressionType.NotEqual => BuildEqualityPredicate(member.Member, constExpression, memberStr, true),
193198
_ => string.Empty
194199
};
195200
return queryPredicate;

test/Redis.OM.Unit.Tests/RediSearchTests/AggregationFunctionalTests.cs

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -271,5 +271,19 @@ public async Task GetGroupCount()
271271
Assert.True(1<=result["COUNT"]);
272272
}
273273
}
274+
275+
[Fact]
276+
public async Task GetGroupCountWithNegationQuery()
277+
{
278+
Setup();
279+
var collection = new RedisAggregationSet<Person>(_connection);
280+
var results = await collection
281+
.Where(x => x.RecordShell.Age != 0)
282+
.GroupBy(x => x.RecordShell.Age).CountGroupMembers().ToListAsync();
283+
foreach (var result in results)
284+
{
285+
Assert.True(1 <= result["COUNT"]);
286+
}
287+
}
274288
}
275289
}

0 commit comments

Comments
 (0)