Skip to content

Commit 5d16d9e

Browse files
committed
Add docs for case-insensitive comparison mode config
Document new CaseInsensitiveMode option in QueryKit, including usage examples for global and per-property settings. Explains benefits for uppercase-normalized data and index efficiency.
1 parent c02767e commit 5d16d9e

File tree

1 file changed

+26
-0
lines changed

1 file changed

+26
-0
lines changed

README.md

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -728,6 +728,32 @@ var config = new QueryKitConfiguration(config =>
728728
var filterExpression = FilterParser.ParseFilter<Recipe>(input, config);
729729
```
730730

731+
#### Case-Insensitive Comparison Mode
732+
733+
By default, QueryKit uses `ToLower()` (which EF Core translates to `LOWER()` in SQL) for case-insensitive string operators like `@=*`, `_=*`, `==*`, etc. If your data is normalized to uppercase, you can switch to `ToUpper()` / `UPPER()` to maintain index efficiency.
734+
735+
```csharp
736+
var config = new QueryKitConfiguration(settings =>
737+
{
738+
settings.CaseInsensitiveComparison = CaseInsensitiveMode.Upper;
739+
});
740+
```
741+
742+
This is particularly useful when:
743+
- Data is stored in uppercase for consistency
744+
- Database indexes are defined on uppercase column values (e.g., `CREATE INDEX ON people (UPPER(email))`)
745+
- You need SARGable queries for better performance
746+
747+
**Per-property override** — you can also control the mode per property, overriding the global setting:
748+
749+
```csharp
750+
var config = new QueryKitConfiguration(settings =>
751+
{
752+
settings.CaseInsensitiveComparison = CaseInsensitiveMode.Lower; // global default
753+
settings.Property<Person>(x => x.Email).HasCaseInsensitiveMode(CaseInsensitiveMode.Upper);
754+
});
755+
```
756+
731757
#### Max Property Depth
732758

733759
You can limit the depth of nested property access to prevent deeply nested queries. This is useful for security and performance reasons when exposing QueryKit to external consumers.

0 commit comments

Comments
 (0)