Uh oh!
There was an error while loading. Please reload this page.
Implement LINQ FullJoin operators - #127236
Conversation
Tagging subscribers to this area: @dotnet/area-system-linq |
There was a problem hiding this comment.
Pull request overview
Adds a new LINQ FullJoin operator across Enumerable, Queryable, and AsyncEnumerable, including reference-assembly updates and new unit tests, to support full outer join semantics in .NET’s LINQ surface area.
Changes:
- Introduces
Enumerable.FullJoinimplementation andQueryable.FullJoinexpression-tree entry points. - Adds
AsyncEnumerable.FullJoin(including async key selector variants) plus ref/csproj wiring. - Adds new test coverage for
System.Linq,System.Linq.Queryable, andSystem.Linq.AsyncEnumerable.
Reviewed changes
Copilot reviewed 14 out of 14 changed files in this pull request and generated 3 comments.
Show a summary per file
| File | Description |
|---|---|
| src/libraries/System.Linq/tests/System.Linq.Tests.csproj | Includes new FullJoinTests.cs in System.Linq test project. |
| src/libraries/System.Linq/tests/FullJoinTests.cs | Adds unit tests for Enumerable.FullJoin, including tuple overloads. |
| src/libraries/System.Linq/src/System/Linq/FullJoin.cs | Implements Enumerable.FullJoin iterator logic and public APIs. |
| src/libraries/System.Linq/src/System.Linq.csproj | Adds System\\Linq\\FullJoin.cs to the build. |
| src/libraries/System.Linq/ref/System.Linq.cs | Adds FullJoin APIs to System.Linq reference assembly. |
| src/libraries/System.Linq.Queryable/tests/System.Linq.Queryable.Tests.csproj | Includes new FullJoinTests.cs in Queryable test project. |
| src/libraries/System.Linq.Queryable/tests/FullJoinTests.cs | Adds unit tests for Queryable.FullJoin (including tuple overloads). |
| src/libraries/System.Linq.Queryable/src/System/Linq/Queryable.cs | Adds Queryable.FullJoin methods producing MethodCallExpressions. |
| src/libraries/System.Linq.Queryable/ref/System.Linq.Queryable.cs | Adds FullJoin APIs to System.Linq.Queryable reference assembly. |
| src/libraries/System.Linq.AsyncEnumerable/tests/System.Linq.AsyncEnumerable.Tests.csproj | Includes new FullJoinTests.cs in AsyncEnumerable test project. |
| src/libraries/System.Linq.AsyncEnumerable/tests/FullJoinTests.cs | Adds tests for async result-selector overloads (validation/cancellation/etc.). |
| src/libraries/System.Linq.AsyncEnumerable/src/System/Linq/FullJoin.cs | Implements AsyncEnumerable.FullJoin (sync + async key selector variants) and tuple overloads. |
| src/libraries/System.Linq.AsyncEnumerable/src/System.Linq.AsyncEnumerable.csproj | Adds System\\Linq\\FullJoin.cs to the build. |
| src/libraries/System.Linq.AsyncEnumerable/ref/System.Linq.AsyncEnumerable.cs | Adds FullJoin APIs to System.Linq.AsyncEnumerable reference assembly. |
Uh oh!
There was an error while loading. Please reload this page.
Uh oh!
There was an error while loading. Please reload this page.
Uh oh!
There was an error while loading. Please reload this page.
roji
left a comment
There was a problem hiding this comment.
Thanks @eiriktsarpalis - LGTM, just one possible fast-path optimization that we might consider doing.
Uh oh!
There was an error while loading. Please reload this page.
Uh oh!
There was an error while loading. Please reload this page.
Uh oh!
There was an error while loading. Please reload this page.
Uh oh!
There was an error while loading. Please reload this page.
eiriktsarpalis
commented
May 5, 2026
@copilot resolve the merge conflicts in this pull request |
1 similar comment
eiriktsarpalis
commented
May 6, 2026
@copilot resolve the merge conflicts in this pull request |
Add FullJoin for Enumerable, Queryable, and AsyncEnumerable using the approved optional comparer API shape. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Preserve unmatched null-key rows in FullJoin and add regression coverage across Enumerable, Queryable, and AsyncEnumerable join operators. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Avoid building the inner lookup and matched-group set when Enumerable.FullJoin is given Array.Empty<T>() for the inner sequence. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Add the requested empty-side fast paths for Enumerable and AsyncEnumerable FullJoin, plus targeted async regression coverage. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
53da6ed to
19173f2CompareUh oh!
There was an error while loading. Please reload this page.
Uh oh!
There was an error while loading. Please reload this page.
Uh oh!
There was an error while loading. Please reload this page.
Uh oh!
There was an error while loading. Please reload this page.
eiriktsarpalis
commented
May 18, 2026
/ba-g test failures are unrelated |
Note
This PR description was generated with GitHub Copilot.
Fixes#124787.
Summary
FullJointoEnumerable,Queryable, andAsyncEnumerableIEqualityComparer<TKey>? comparer = nullparameter