Skip to content

Support case-insensitive comparison with ObjectListFilter#582

Draft
Copilot wants to merge 2 commits into
devfrom
copilot/support-case-insensitive-comparison
Draft

Support case-insensitive comparison with ObjectListFilter#582
Copilot wants to merge 2 commits into
devfrom
copilot/support-case-insensitive-comparison

Conversation

Copy link
Copy Markdown
Contributor

Copilot AI commented May 23, 2026

ObjectListFilter only supported case-sensitive string comparisons. This adds four case-insensitive variants using StringComparison.OrdinalIgnoreCase.

New filter cases

DU case Operator GraphQL suffix (long / short)
EqualsCI ===~ _equals_ci / _eqi
StartsWithCI =@@~ _starts_with_ci / _swci
EndsWithCI @@=~ _ends_with_ci / _ewci
ContainsCI @=@~ _contains_ci / _cci

Usage

// F# directly
let filter = ContainsCI { FieldName = "firstName"; Value = "jon" }
queryable.Apply(filter)

// Via operators
open ObjectListFilter.Operators
let filter = "firstName" ===~ "jonathan"   // case-insensitive equals

// Via GraphQL input (coerced from query argument)
// { firstName_contains_ci: "jon" }
// { firstName_eqi: "jonathan" }

Implementation notes

  • buildFilterExpr emits Expression.Call using the string.Equals/StartsWith/EndsWith/Contains(string, StringComparison) overloads
  • CI suffix patterns are matched before their case-sensitive counterparts in parseFieldCondition to avoid ambiguous prefix matches (e.g. _contains_ci before _contains)

Co-authored-by: xperiandri <2365592+xperiandri@users.noreply.github.com>
Copilot AI changed the title [WIP] Propose plan for case insensitive comparison in ObjectListFilter Support case-insensitive comparison with ObjectListFilter May 23, 2026
Copilot AI requested a review from xperiandri May 23, 2026 13:21
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Support case insensitive comparison with ObjectListFilter

2 participants