Skip to content

Commit 353a740

Browse files
author
David Lebee
committed
case insensitive support.
1 parent 1ceb75e commit 353a740

File tree

5 files changed

+40
-1
lines changed

5 files changed

+40
-1
lines changed

PoweredSoft.DynamicQuery.Core/ISimpleFilter.cs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,5 +5,6 @@ public interface ISimpleFilter : IFilter
55
string Path { get; set; }
66
object Value { get; set; }
77
bool? Not { get; set; }
8+
bool? CaseInsensitive { get; set; }
89
}
910
}

PoweredSoft.DynamicQuery.Test/FilterTests.cs

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@ private class MockIsChuckFilter : ISimpleFilter
1818
public string Path { get; set; } = "FirstName";
1919
public object Value { get; set; } = "Chuck";
2020
public bool? Not { get; set; }
21+
public bool? CaseInsensitive { get; set; }
2122
}
2223

2324
[Fact]
@@ -38,6 +39,8 @@ public void TestInversionOfControl()
3839
});
3940
}
4041

42+
43+
4144
[Fact]
4245
public void SimpleFilter()
4346
{
@@ -64,6 +67,33 @@ public void SimpleFilter()
6467
});
6568
}
6669

70+
[Fact]
71+
public void SimpleFilterCaseInsensitive()
72+
{
73+
MockContextFactory.SeedAndTestContextFor("FilterTests_SimpleFilterCaseInsensitive", TestSeeders.SimpleSeedScenario, ctx =>
74+
{
75+
var resultShouldMatch = ctx.Items.Where(t => t.Name.ToLower().EndsWith("Cables".ToLower())).ToList();
76+
77+
var criteria = new QueryCriteria()
78+
{
79+
Filters = new List<IFilter>
80+
{
81+
new SimpleFilter
82+
{
83+
Path = "Name",
84+
Type = FilterType.EndsWith,
85+
Value = "Cables",
86+
CaseInsensitive = true
87+
}
88+
}
89+
};
90+
91+
var queryHandler = new QueryHandler(Enumerable.Empty<IQueryInterceptorProvider>());
92+
var result = queryHandler.Execute(ctx.Items, criteria);
93+
Assert.Equal(resultShouldMatch, result.Data);
94+
});
95+
}
96+
6797

6898

6999
[Fact]

PoweredSoft.DynamicQuery/Filter.cs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@ public class SimpleFilter : ISimpleFilter
1818
public FilterType Type { get; set; }
1919
public string Path { get; set; }
2020
public object Value { get; set; }
21+
public bool? CaseInsensitive { get; set; }
2122
}
2223

2324
public class CompositeFilter : ICompositeFilter

PoweredSoft.DynamicQuery/PoweredSoft.DynamicQuery.csproj

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@
2121
<ItemGroup>
2222
<PackageReference Include="Microsoft.Extensions.DependencyInjection" Version="3.0.0" />
2323
<PackageReference Include="PoweredSoft.Data" Version="2.0.0" />
24-
<PackageReference Include="PoweredSoft.DynamicLinq" Version="1.1.11" />
24+
<PackageReference Include="PoweredSoft.DynamicLinq" Version="1.1.12" />
2525
</ItemGroup>
2626

2727
<ItemGroup>

PoweredSoft.DynamicQuery/QueryHandlerBase.cs

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -366,6 +366,13 @@ protected virtual void AppleCompositeFilter<TSource>(WhereBuilder whereBuilder,
366366
protected virtual void ApplySimpleFilter<TSource>(WhereBuilder whereBuilder, ISimpleFilter filter)
367367
{
368368
var resolvedConditionOperator = ResolveConditionOperatorFrom(filter.Type);
369+
370+
if (filter.CaseInsensitive == true)
371+
{
372+
filter.Path += ".ToLower()";
373+
filter.Value = $"{filter.Value}"?.ToLower();
374+
}
375+
369376
whereBuilder.Compare(filter.Path, resolvedConditionOperator, filter.Value, and: filter.And == true, negate: filter.Not == true);
370377
}
371378

0 commit comments

Comments
 (0)