Skip to content

[doc-sync] docs: fix README API inaccuracies in R3Ext.DynamicData operators #30

Description

@github-actions

Caution

Protected files were modified in this change.
This pull request is in request_review mode and requires explicit human scrutiny before merge.

Protected files: README.md

Summary

Fixes three factual inaccuracies in the README.md reactive collections section, where the documentation references APIs that do not exist in R3Ext.DynamicData.


Changes

1. SortExpressionComparer<T>Comparer<T>.Create(...) in code example

The code example in the Reactive Collections section used SortExpressionComparer<Person>.Ascending(p => p.Name), but SortExpressionComparer<T> is not ported to R3Ext.DynamicData — it is explicitly listed as a known gap in docs/LibraryParity.md:

"Sort operators accept IComparer<T> directly — see Known Gaps"

The example now uses the correct approach:

.Sort(Comparer<Person>.Create((a, b) => string.Compare(a.Name, b.Name, StringComparison.Ordinal)))

2. SortAsyncSortAndBind in the operator table

The Sorting row in the operators table listed `SortAsync` which does not exist anywhere in the codebase. The fused sort+bind operator that does exist is SortAndBind (in ObservableCacheEx.SortAndBind.cs).

3. MergeChangeSetMergeChangeSets (typo fix)

The Change Tracking row listed `MergeChangeSet` (singular) but the actual method name is MergeChangeSets (plural), as defined in R3Ext.DynamicData/List/ObservableListEx.MergeChangeSets.cs.


Verification

  • SortExpressionComparer<T>: confirmed absent with grep -rn "SortExpressionComparer" --include="*.cs"
  • SortAsync: confirmed absent with grep -rn "SortAsync" --include="*.cs"
  • SortAndBind: confirmed present in R3Ext.DynamicData/Cache/ObservableCacheEx.SortAndBind.cs
  • MergeChangeSets: confirmed present in R3Ext.DynamicData/List/ObservableListEx.MergeChangeSets.cs
  • Comparer<T>.Create(...): standard .NET API, no porting required

Generated by 📚 Documentation Sync · sonnet46 2.9M ·


Note

This was originally intended as a pull request, but GitHub Actions is not permitted to create or approve pull requests in this repository.
The changes have been pushed to branch doc-sync/fix-readme-api-inaccuracies-793fc657b54ac6e1.

Click here to create the pull request

To fix the permissions issue, go to SettingsActionsGeneral and enable Allow GitHub Actions to create and approve pull requests. See also: gh-aw FAQ

Show patch preview (47 of 47 lines)
From ae054c9d67c450cf3220c1b4be7e08fd13648a1d Mon Sep 17 00:00:00 2001
From: "github-actions[bot]" <github-actions[bot]@users.noreply.github.com>
Date: Thu, 25 Jun 2026 09:56:48 +0000
Subject: [PATCH] docs: fix README API inaccuracies in R3Ext.DynamicData
 operators

- Replace SortExpressionComparer<T> (not ported) with Comparer<T>.Create()
  in the reactive collections code example; SortExpressionComparer is a
  known gap listed in docs/LibraryParity.md
- Replace non-existent SortAsync with SortAndBind in the operator table
- Fix MergeChangeSet (singular) to MergeChangeSets (actual method name)

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
---
 README.md | 6 +++---
 1 file changed, 3 insertions(+), 3 deletions(-)

diff --git a/README.md b/README.md
index 9fbbfc7..814f48c 100644
--- a/README.md
+++ b/README.md
@@ -113,7 +113,7 @@ var cache = new SourceCache<Person, int>(p => p.Id);
 // Observe changes with automatic caching
 cache.Connect()
     .Filter(p => p.IsActive)
-    .Sort(SortExpressionComparer<Person>.Ascending(p => p.Name))
+    .Sort(Comparer<Person>.Create((a, b) => string.Compare(a.Name, b.Name, StringComparison.Ordinal)))
     .Transform(p => new PersonViewModel(p))
     .Bind(out var items)  // Bind to ObservableCollection
     .Subscribe();
@@ -139,10 +139,10 @@ cache.Connect()
 | ------------------- | ---------------------------------------------- |
 | **Filtering**       | `Filter`, `FilterOnObservable`, `AutoRefresh`  |
 | **Transformation**  | `Transform`, `TransformMany`, `TransformAsync` |
-| **Sorting**         | `Sort`, `SortAsync`                            |
+| **Sorting**         | `Sort`, `SortAndBind`                          |
 | **Grouping**        | `Group`, `GroupWithImmutableState`, `GroupOn`  |
 | **Aggregation**     | `Count`, `Sum`, `Avg`, `Min`, `Max`            |
-| **Change Tracking** | `DistinctValues`, `MergeChangeSet`, `Clone`    |
+| **Change Tracking** | `DistinctValues`, `MergeChangeSets`, `Clone
... (truncated)

Metadata

Metadata

Assignees

No one assigned

    Labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions