Revert "Add GroupJoin overload returning IGrouping" - #126624

Merged
danmoseley merged 2 commits into
mainfrom
revert-121999-copilot/add-tuple-return-overload
Apr 8, 2026
Merged

Revert "Add GroupJoin overload returning IGrouping"#126624
danmoseley merged 2 commits into
mainfrom
revert-121999-copilot/add-tuple-return-overload

Conversation

@MichalStrehovsky

Copy link
Copy Markdown
Member

Reverts #121999

This was merged during CI outage.

src\libraries\System.Linq.AsyncEnumerable\tests\JoinTests.cs(222,32): error CS0411: (NETCORE_ENGINEERING_TELEMETRY=Build) The type arguments for method 'AsyncEnumerable.Join<TOuter, TInner, TKey>(IAsyncEnumerable<TOuter>, IAsyncEnumerable<TInner>, Func<TOuter, TKey>, Func<TInner, TKey>, IEqualityComparer<TKey>?)' cannot be inferred from the usage. Try specifying the type arguments explicitly.

CopilotAI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Reverts the recently-added GroupJoin overloads that returned IGrouping<,> (and their associated test coverage) from System.Linq, System.Linq.Queryable, and System.Linq.AsyncEnumerable, restoring the previous API surface after CI-discovered compilation issues.

Changes:

  • Remove GroupJoin<TOuter,TInner,TKey>(...) -> IEnumerable/IQueryable/IAsyncEnumerable<IGrouping<...>> overloads from implementations and ref assemblies.
  • Delete the corresponding unit tests that validated the removed overloads.
  • Remove now-unused helper grouping types (GroupJoinGrouping, AsyncGroupJoinGrouping) and related using System.Collections; directives.

Reviewed changes

Copilot reviewed 9 out of 9 changed files in this pull request and generated no comments.

Show a summary per file
FileDescription
src/libraries/System.Linq/tests/GroupJoinTests.csRemoves tests targeting the reverted GroupJoin overload without a result selector.
src/libraries/System.Linq/src/System/Linq/GroupJoin.csRemoves the GroupJoin overload returning IGrouping<,> plus its iterator and helper grouping type.
src/libraries/System.Linq/ref/System.Linq.csRemoves the ref declaration for the reverted GroupJoin overload.
src/libraries/System.Linq.Queryable/tests/GroupJoinTests.csRemoves tests targeting the reverted Queryable.GroupJoin overload without a result selector.
src/libraries/System.Linq.Queryable/src/System/Linq/Queryable.csRemoves the Queryable.GroupJoin overload returning IQueryable<IGrouping<,>>.
src/libraries/System.Linq.Queryable/ref/System.Linq.Queryable.csRemoves the ref declaration for the reverted Queryable.GroupJoin overload.
src/libraries/System.Linq.AsyncEnumerable/tests/GroupJoinTests.csRemoves tests targeting the reverted AsyncEnumerable.GroupJoin overloads returning IGrouping<,>.
src/libraries/System.Linq.AsyncEnumerable/src/System/Linq/GroupJoin.csRemoves the AsyncEnumerable.GroupJoin overloads returning IGrouping<,> plus the helper grouping type.
src/libraries/System.Linq.AsyncEnumerable/ref/System.Linq.AsyncEnumerable.csRemoves the ref declarations for the reverted AsyncEnumerable.GroupJoin overloads.

@dotnet-policy-service

Copy link
Copy Markdown
Contributor

Tagging subscribers to this area: @dotnet/area-system-linq
See info in area-owners.md if you want to be subscribed.

@github-actions

This comment has been minimized.

@danmoseley
danmoseley enabled auto-merge (squash) April 8, 2026 03:57
@MichalStrehovsky

Copy link
Copy Markdown
MemberAuthor

We still have a build break. Seems like this is not the only PR in the area path that @eiriktsarpalis merged with /ba-g without running any tests. The other one is #121998. I cannot do a revert of that one from github UI because "Sorry, this pull request couldn’t be reverted automatically. It may have already been reverted, or the content may have changed since it was merged." I assume because these PRs depend on each other.

So I've pushed out a git revert 2916d73755eb875a8803dfbb4d3a72a29cc6bd9b too.

@github-actions

Copy link
Copy Markdown
Contributor

Note

This review was generated by Copilot.

🤖 Copilot Code Review — PR #126624

Holistic Assessment

Motivation: Justified. PRs #121999 (GroupJoin IGrouping<,> overloads) and #121998 (Join/LeftJoin/RightJoin tuple overloads) were merged during a CI outage and introduced a CS0411 type inference ambiguity build error. Reverting both to restore a known-good state on main is the correct response.

Approach: Two clean git revert commits that exactly invert the original additions. All public API surface, implementations, internal helper types, and tests are removed across System.Linq, System.Linq.Queryable, and System.Linq.AsyncEnumerable with no residual artifacts.

Summary: ✅ LGTM. Both reverts are complete and clean. All added surface from #121999 and #121998 is fully removed with no dangling references. The pre-existing overloads (with resultSelector parameters) remain intact and unchanged. The CS0411 build error cited in the PR description is addressed by the second commit's revert of the tuple-returning Join overloads.


Detailed Findings

✅ Revert Completeness — Both PRs fully reverted

Verified that both reverts remove all artifacts:

Commit 1 (796ef57c) — Reverts #121999 (GroupJoin IGrouping overloads):

  • 3 ref assemblies updated: removed GroupJoin<TOuter,TInner,TKey> declarations
  • 3 src files: removed public methods, private iterators, and internal helper classes (GroupJoinGrouping, AsyncGroupJoinGrouping)
  • 3 test files: removed all tests for the reverted overloads

Commit 2 (51a2eb51) — Reverts #121998 (Join/LeftJoin/RightJoin tuple overloads):

  • 3 ref assemblies updated: removed tuple-returning Join, LeftJoin, RightJoin declarations
  • 6 src files (Join.cs, LeftJoin.cs, RightJoin.cs × 2 libraries): removed public methods and private iterators
  • 6 test files: removed all TupleJoin*, TupleLeftJoin*, TupleRightJoin* tests

Confirmed zero remaining references to GroupJoinGrouping, AsyncGroupJoinGrouping, TupleJoin, TupleLeftJoin, or TupleRightJoin in the affected libraries.

✅ No Collateral Damage — Existing overloads untouched

The original resultSelector-based overloads for Join, GroupJoin, LeftJoin, and RightJoin are preserved identically in all three libraries (System.Linq: 5+3+5+5 public methods; AsyncEnumerable: 3+3+3+3 public methods). All existing tests for those overloads are retained. No csproj files were modified — file additions/removals were all within existing source files.

✅ Build Error Addressed — CS0411 resolved

The cited CS0411 error (AsyncEnumerable.Join<TOuter, TInner, TKey> type arguments cannot be inferred) was caused by the tuple-returning Join overloads creating an ambiguity with the resultSelector-based overloads when the compiler attempted type inference. The second commit reverting #121998 directly addresses this.

💡 PR Title and Description — Slightly outdated

The PR title says "Revert 'Add GroupJoin overload returning IGrouping'" and the description only mentions reverting #121999, but the PR now also reverts #121998 (Join/LeftJoin/RightJoin tuple overloads). Consider updating the title/description to reflect both reverts for clarity in the git history.

Generated by Code Review for issue #126624 ·

@MichalStrehovsky

Copy link
Copy Markdown
MemberAuthor

/ba-g wasm legs are broken everywhere, this is unlikely to make them worse since it's a clean revert. the build break is gone.

@danmoseley
danmoseley merged commit 14eeb75 into mainApr 8, 2026
84 of 94 checks passed
@danmoseley
danmoseley deleted the revert-121999-copilot/add-tuple-return-overload branch April 8, 2026 07:34
radekdoulik pushed a commit to radekdoulik/runtime that referenced this pull request Apr 9, 2026
eiriktsarpalis added a commit that referenced this pull request Apr 29, 2026
…26649)
> [!NOTE]
> This PR description was generated with Copilot.
Reinstates the LINQ convenience overloads from #121998 and #121999 that
were reverted in #126624, while also fixing the build break that caused
the revert.
## Summary
- preserves the original API/implementation commits by cherry-picking
them onto this branch
- fixes the `System.Linq.AsyncEnumerable` test build break by making the
affected async selectorless overload calls explicit where inference was
insufficient during the multi-target build
## Validation
- `build.cmd clr+libs -rc release`
- `.\dotnet.cmd build
.\src\libraries\System.Linq.AsyncEnumerable\tests\System.Linq.AsyncEnumerable.Tests.csproj
/t:Test --no-restore`
- `.\dotnet.cmd build
.\src\libraries\System.Linq\tests\System.Linq.Tests.csproj /t:Test
--no-restore`
- `.\dotnet.cmd build
.\src\libraries\System.Linq.Queryable\tests\System.Linq.Queryable.Tests.csproj
/t:Test --no-restore`
---------
Co-authored-by: Copilot <198982749+Copilot@users.noreply.github.com>
Co-authored-by: Shay Rojansky <roji@roji.org>
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Co-authored-by: roji <1862641+roji@users.noreply.github.com>
@github-actionsgithub-actionsBot locked and limited conversation to collaborators May 8, 2026
Sign up for freeto subscribe to this conversation on GitHub. Already have an account? Sign in.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants

@MichalStrehovsky@danmoseley
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Add copy buttons to all
 blocks\n(function() {\n function addCopyButtons() {\n document.querySelectorAll('pre code').forEach(function(codeBlock) {\n if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;\n codeBlock.parentElement.setAttribute('data-copy-added', 'true');\n \n var btn = document.createElement('button');\n btn.textContent = 'Copy';\n btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';\n btn.onmouseover = function() { this.style.opacity = '1'; };\n btn.onmouseout = function() { this.style.opacity = '0.7'; };\n btn.onclick = function() {\n navigator.clipboard.writeText(codeBlock.textContent).then(function() {\n btn.textContent = 'Copied!';\n setTimeout(function() { btn.textContent = 'Copy'; }, 1500);\n });\n };\n codeBlock.parentElement.style.position = 'relative';\n codeBlock.parentElement.appendChild(btn);\n });\n }\n \n addCopyButtons();\n \n // Re-run on dynamic content\n var observer = new MutationObserver(addCopyButtons);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Add Copy Buttons to Code Blocks");
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
Skip to content

Revert "Add GroupJoin overload returning IGrouping" - #126624

Merged
danmoseley merged 2 commits into
mainfrom
revert-121999-copilot/add-tuple-return-overload
Apr 8, 2026
Merged

Revert "Add GroupJoin overload returning IGrouping"#126624
danmoseley merged 2 commits into
mainfrom
revert-121999-copilot/add-tuple-return-overload

Conversation

@MichalStrehovsky

Copy link
Copy Markdown
Member

Reverts #121999

This was merged during CI outage.

src\libraries\System.Linq.AsyncEnumerable\tests\JoinTests.cs(222,32): error CS0411: (NETCORE_ENGINEERING_TELEMETRY=Build) The type arguments for method 'AsyncEnumerable.Join<TOuter, TInner, TKey>(IAsyncEnumerable<TOuter>, IAsyncEnumerable<TInner>, Func<TOuter, TKey>, Func<TInner, TKey>, IEqualityComparer<TKey>?)' cannot be inferred from the usage. Try specifying the type arguments explicitly.

CopilotAI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Reverts the recently-added GroupJoin overloads that returned IGrouping<,> (and their associated test coverage) from System.Linq, System.Linq.Queryable, and System.Linq.AsyncEnumerable, restoring the previous API surface after CI-discovered compilation issues.

Changes:

  • Remove GroupJoin<TOuter,TInner,TKey>(...) -> IEnumerable/IQueryable/IAsyncEnumerable<IGrouping<...>> overloads from implementations and ref assemblies.
  • Delete the corresponding unit tests that validated the removed overloads.
  • Remove now-unused helper grouping types (GroupJoinGrouping, AsyncGroupJoinGrouping) and related using System.Collections; directives.

Reviewed changes

Copilot reviewed 9 out of 9 changed files in this pull request and generated no comments.

Show a summary per file
FileDescription
src/libraries/System.Linq/tests/GroupJoinTests.csRemoves tests targeting the reverted GroupJoin overload without a result selector.
src/libraries/System.Linq/src/System/Linq/GroupJoin.csRemoves the GroupJoin overload returning IGrouping<,> plus its iterator and helper grouping type.
src/libraries/System.Linq/ref/System.Linq.csRemoves the ref declaration for the reverted GroupJoin overload.
src/libraries/System.Linq.Queryable/tests/GroupJoinTests.csRemoves tests targeting the reverted Queryable.GroupJoin overload without a result selector.
src/libraries/System.Linq.Queryable/src/System/Linq/Queryable.csRemoves the Queryable.GroupJoin overload returning IQueryable<IGrouping<,>>.
src/libraries/System.Linq.Queryable/ref/System.Linq.Queryable.csRemoves the ref declaration for the reverted Queryable.GroupJoin overload.
src/libraries/System.Linq.AsyncEnumerable/tests/GroupJoinTests.csRemoves tests targeting the reverted AsyncEnumerable.GroupJoin overloads returning IGrouping<,>.
src/libraries/System.Linq.AsyncEnumerable/src/System/Linq/GroupJoin.csRemoves the AsyncEnumerable.GroupJoin overloads returning IGrouping<,> plus the helper grouping type.
src/libraries/System.Linq.AsyncEnumerable/ref/System.Linq.AsyncEnumerable.csRemoves the ref declarations for the reverted AsyncEnumerable.GroupJoin overloads.

@dotnet-policy-service

Copy link
Copy Markdown
Contributor

Tagging subscribers to this area: @dotnet/area-system-linq
See info in area-owners.md if you want to be subscribed.

@github-actions

This comment has been minimized.

@danmoseley
danmoseley enabled auto-merge (squash) April 8, 2026 03:57
@MichalStrehovsky

Copy link
Copy Markdown
MemberAuthor

We still have a build break. Seems like this is not the only PR in the area path that @eiriktsarpalis merged with /ba-g without running any tests. The other one is #121998. I cannot do a revert of that one from github UI because "Sorry, this pull request couldn’t be reverted automatically. It may have already been reverted, or the content may have changed since it was merged." I assume because these PRs depend on each other.

So I've pushed out a git revert 2916d73755eb875a8803dfbb4d3a72a29cc6bd9b too.

@github-actions

Copy link
Copy Markdown
Contributor

Note

This review was generated by Copilot.

🤖 Copilot Code Review — PR #126624

Holistic Assessment

Motivation: Justified. PRs #121999 (GroupJoin IGrouping<,> overloads) and #121998 (Join/LeftJoin/RightJoin tuple overloads) were merged during a CI outage and introduced a CS0411 type inference ambiguity build error. Reverting both to restore a known-good state on main is the correct response.

Approach: Two clean git revert commits that exactly invert the original additions. All public API surface, implementations, internal helper types, and tests are removed across System.Linq, System.Linq.Queryable, and System.Linq.AsyncEnumerable with no residual artifacts.

Summary: ✅ LGTM. Both reverts are complete and clean. All added surface from #121999 and #121998 is fully removed with no dangling references. The pre-existing overloads (with resultSelector parameters) remain intact and unchanged. The CS0411 build error cited in the PR description is addressed by the second commit's revert of the tuple-returning Join overloads.


Detailed Findings

✅ Revert Completeness — Both PRs fully reverted

Verified that both reverts remove all artifacts:

Commit 1 (796ef57c) — Reverts #121999 (GroupJoin IGrouping overloads):

  • 3 ref assemblies updated: removed GroupJoin<TOuter,TInner,TKey> declarations
  • 3 src files: removed public methods, private iterators, and internal helper classes (GroupJoinGrouping, AsyncGroupJoinGrouping)
  • 3 test files: removed all tests for the reverted overloads

Commit 2 (51a2eb51) — Reverts #121998 (Join/LeftJoin/RightJoin tuple overloads):

  • 3 ref assemblies updated: removed tuple-returning Join, LeftJoin, RightJoin declarations
  • 6 src files (Join.cs, LeftJoin.cs, RightJoin.cs × 2 libraries): removed public methods and private iterators
  • 6 test files: removed all TupleJoin*, TupleLeftJoin*, TupleRightJoin* tests

Confirmed zero remaining references to GroupJoinGrouping, AsyncGroupJoinGrouping, TupleJoin, TupleLeftJoin, or TupleRightJoin in the affected libraries.

✅ No Collateral Damage — Existing overloads untouched

The original resultSelector-based overloads for Join, GroupJoin, LeftJoin, and RightJoin are preserved identically in all three libraries (System.Linq: 5+3+5+5 public methods; AsyncEnumerable: 3+3+3+3 public methods). All existing tests for those overloads are retained. No csproj files were modified — file additions/removals were all within existing source files.

✅ Build Error Addressed — CS0411 resolved

The cited CS0411 error (AsyncEnumerable.Join<TOuter, TInner, TKey> type arguments cannot be inferred) was caused by the tuple-returning Join overloads creating an ambiguity with the resultSelector-based overloads when the compiler attempted type inference. The second commit reverting #121998 directly addresses this.

💡 PR Title and Description — Slightly outdated

The PR title says "Revert 'Add GroupJoin overload returning IGrouping'" and the description only mentions reverting #121999, but the PR now also reverts #121998 (Join/LeftJoin/RightJoin tuple overloads). Consider updating the title/description to reflect both reverts for clarity in the git history.

Generated by Code Review for issue #126624 ·

@MichalStrehovsky

Copy link
Copy Markdown
MemberAuthor

/ba-g wasm legs are broken everywhere, this is unlikely to make them worse since it's a clean revert. the build break is gone.

@danmoseley
danmoseley merged commit 14eeb75 into mainApr 8, 2026
84 of 94 checks passed
@danmoseley
danmoseley deleted the revert-121999-copilot/add-tuple-return-overload branch April 8, 2026 07:34
radekdoulik pushed a commit to radekdoulik/runtime that referenced this pull request Apr 9, 2026
eiriktsarpalis added a commit that referenced this pull request Apr 29, 2026
…26649)
> [!NOTE]
> This PR description was generated with Copilot.
Reinstates the LINQ convenience overloads from #121998 and #121999 that
were reverted in #126624, while also fixing the build break that caused
the revert.
## Summary
- preserves the original API/implementation commits by cherry-picking
them onto this branch
- fixes the `System.Linq.AsyncEnumerable` test build break by making the
affected async selectorless overload calls explicit where inference was
insufficient during the multi-target build
## Validation
- `build.cmd clr+libs -rc release`
- `.\dotnet.cmd build
.\src\libraries\System.Linq.AsyncEnumerable\tests\System.Linq.AsyncEnumerable.Tests.csproj
/t:Test --no-restore`
- `.\dotnet.cmd build
.\src\libraries\System.Linq\tests\System.Linq.Tests.csproj /t:Test
--no-restore`
- `.\dotnet.cmd build
.\src\libraries\System.Linq.Queryable\tests\System.Linq.Queryable.Tests.csproj
/t:Test --no-restore`
---------
Co-authored-by: Copilot <198982749+Copilot@users.noreply.github.com>
Co-authored-by: Shay Rojansky <roji@roji.org>
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Co-authored-by: roji <1862641+roji@users.noreply.github.com>
@github-actionsgithub-actionsBot locked and limited conversation to collaborators May 8, 2026
Sign up for freeto subscribe to this conversation on GitHub. Already have an account? Sign in.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants

@MichalStrehovsky@danmoseley
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Force GitHub README to respect dark mode\n(function() {\n var style = document.createElement('style');\n style.textContent = '\n .markdown-body {\n color-scheme: dark light;\n }\n .markdown-body pre { background: #161b22 !important; }\n .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; }\n .markdown-body table th, .markdown-body table td { border-color: #30363d !important; }\n .markdown-body img { background: #0d1117; }\n .markdown-body blockquote { border-left-color: #8b949e; }\n .markdown-body hr { border-color: #30363d; }\n ';\n document.head.appendChild(style);\n})();", "GitHub Dark Mode README Fix"); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Revert "Add GroupJoin overload returning IGrouping" - #126624

Merged
danmoseley merged 2 commits into
mainfrom
revert-121999-copilot/add-tuple-return-overload
Apr 8, 2026
Merged

Revert "Add GroupJoin overload returning IGrouping"#126624
danmoseley merged 2 commits into
mainfrom
revert-121999-copilot/add-tuple-return-overload

Conversation

@MichalStrehovsky

Copy link
Copy Markdown
Member

Reverts #121999

This was merged during CI outage.

src\libraries\System.Linq.AsyncEnumerable\tests\JoinTests.cs(222,32): error CS0411: (NETCORE_ENGINEERING_TELEMETRY=Build) The type arguments for method 'AsyncEnumerable.Join<TOuter, TInner, TKey>(IAsyncEnumerable<TOuter>, IAsyncEnumerable<TInner>, Func<TOuter, TKey>, Func<TInner, TKey>, IEqualityComparer<TKey>?)' cannot be inferred from the usage. Try specifying the type arguments explicitly.

CopilotAI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Reverts the recently-added GroupJoin overloads that returned IGrouping<,> (and their associated test coverage) from System.Linq, System.Linq.Queryable, and System.Linq.AsyncEnumerable, restoring the previous API surface after CI-discovered compilation issues.

Changes:

  • Remove GroupJoin<TOuter,TInner,TKey>(...) -> IEnumerable/IQueryable/IAsyncEnumerable<IGrouping<...>> overloads from implementations and ref assemblies.
  • Delete the corresponding unit tests that validated the removed overloads.
  • Remove now-unused helper grouping types (GroupJoinGrouping, AsyncGroupJoinGrouping) and related using System.Collections; directives.

Reviewed changes

Copilot reviewed 9 out of 9 changed files in this pull request and generated no comments.

Show a summary per file
FileDescription
src/libraries/System.Linq/tests/GroupJoinTests.csRemoves tests targeting the reverted GroupJoin overload without a result selector.
src/libraries/System.Linq/src/System/Linq/GroupJoin.csRemoves the GroupJoin overload returning IGrouping<,> plus its iterator and helper grouping type.
src/libraries/System.Linq/ref/System.Linq.csRemoves the ref declaration for the reverted GroupJoin overload.
src/libraries/System.Linq.Queryable/tests/GroupJoinTests.csRemoves tests targeting the reverted Queryable.GroupJoin overload without a result selector.
src/libraries/System.Linq.Queryable/src/System/Linq/Queryable.csRemoves the Queryable.GroupJoin overload returning IQueryable<IGrouping<,>>.
src/libraries/System.Linq.Queryable/ref/System.Linq.Queryable.csRemoves the ref declaration for the reverted Queryable.GroupJoin overload.
src/libraries/System.Linq.AsyncEnumerable/tests/GroupJoinTests.csRemoves tests targeting the reverted AsyncEnumerable.GroupJoin overloads returning IGrouping<,>.
src/libraries/System.Linq.AsyncEnumerable/src/System/Linq/GroupJoin.csRemoves the AsyncEnumerable.GroupJoin overloads returning IGrouping<,> plus the helper grouping type.
src/libraries/System.Linq.AsyncEnumerable/ref/System.Linq.AsyncEnumerable.csRemoves the ref declarations for the reverted AsyncEnumerable.GroupJoin overloads.

@dotnet-policy-service

Copy link
Copy Markdown
Contributor

Tagging subscribers to this area: @dotnet/area-system-linq
See info in area-owners.md if you want to be subscribed.

@github-actions

This comment has been minimized.

@danmoseley
danmoseley enabled auto-merge (squash) April 8, 2026 03:57
@MichalStrehovsky

Copy link
Copy Markdown
MemberAuthor

We still have a build break. Seems like this is not the only PR in the area path that @eiriktsarpalis merged with /ba-g without running any tests. The other one is #121998. I cannot do a revert of that one from github UI because "Sorry, this pull request couldn’t be reverted automatically. It may have already been reverted, or the content may have changed since it was merged." I assume because these PRs depend on each other.

So I've pushed out a git revert 2916d73755eb875a8803dfbb4d3a72a29cc6bd9b too.

@github-actions

Copy link
Copy Markdown
Contributor

Note

This review was generated by Copilot.

🤖 Copilot Code Review — PR #126624

Holistic Assessment

Motivation: Justified. PRs #121999 (GroupJoin IGrouping<,> overloads) and #121998 (Join/LeftJoin/RightJoin tuple overloads) were merged during a CI outage and introduced a CS0411 type inference ambiguity build error. Reverting both to restore a known-good state on main is the correct response.

Approach: Two clean git revert commits that exactly invert the original additions. All public API surface, implementations, internal helper types, and tests are removed across System.Linq, System.Linq.Queryable, and System.Linq.AsyncEnumerable with no residual artifacts.

Summary: ✅ LGTM. Both reverts are complete and clean. All added surface from #121999 and #121998 is fully removed with no dangling references. The pre-existing overloads (with resultSelector parameters) remain intact and unchanged. The CS0411 build error cited in the PR description is addressed by the second commit's revert of the tuple-returning Join overloads.


Detailed Findings

✅ Revert Completeness — Both PRs fully reverted

Verified that both reverts remove all artifacts:

Commit 1 (796ef57c) — Reverts #121999 (GroupJoin IGrouping overloads):

  • 3 ref assemblies updated: removed GroupJoin<TOuter,TInner,TKey> declarations
  • 3 src files: removed public methods, private iterators, and internal helper classes (GroupJoinGrouping, AsyncGroupJoinGrouping)
  • 3 test files: removed all tests for the reverted overloads

Commit 2 (51a2eb51) — Reverts #121998 (Join/LeftJoin/RightJoin tuple overloads):

  • 3 ref assemblies updated: removed tuple-returning Join, LeftJoin, RightJoin declarations
  • 6 src files (Join.cs, LeftJoin.cs, RightJoin.cs × 2 libraries): removed public methods and private iterators
  • 6 test files: removed all TupleJoin*, TupleLeftJoin*, TupleRightJoin* tests

Confirmed zero remaining references to GroupJoinGrouping, AsyncGroupJoinGrouping, TupleJoin, TupleLeftJoin, or TupleRightJoin in the affected libraries.

✅ No Collateral Damage — Existing overloads untouched

The original resultSelector-based overloads for Join, GroupJoin, LeftJoin, and RightJoin are preserved identically in all three libraries (System.Linq: 5+3+5+5 public methods; AsyncEnumerable: 3+3+3+3 public methods). All existing tests for those overloads are retained. No csproj files were modified — file additions/removals were all within existing source files.

✅ Build Error Addressed — CS0411 resolved

The cited CS0411 error (AsyncEnumerable.Join<TOuter, TInner, TKey> type arguments cannot be inferred) was caused by the tuple-returning Join overloads creating an ambiguity with the resultSelector-based overloads when the compiler attempted type inference. The second commit reverting #121998 directly addresses this.

💡 PR Title and Description — Slightly outdated

The PR title says "Revert 'Add GroupJoin overload returning IGrouping'" and the description only mentions reverting #121999, but the PR now also reverts #121998 (Join/LeftJoin/RightJoin tuple overloads). Consider updating the title/description to reflect both reverts for clarity in the git history.

Generated by Code Review for issue #126624 ·

@MichalStrehovsky

Copy link
Copy Markdown
MemberAuthor

/ba-g wasm legs are broken everywhere, this is unlikely to make them worse since it's a clean revert. the build break is gone.

@danmoseley
danmoseley merged commit 14eeb75 into mainApr 8, 2026
84 of 94 checks passed
@danmoseley
danmoseley deleted the revert-121999-copilot/add-tuple-return-overload branch April 8, 2026 07:34
radekdoulik pushed a commit to radekdoulik/runtime that referenced this pull request Apr 9, 2026
eiriktsarpalis added a commit that referenced this pull request Apr 29, 2026
…26649)
> [!NOTE]
> This PR description was generated with Copilot.
Reinstates the LINQ convenience overloads from #121998 and #121999 that
were reverted in #126624, while also fixing the build break that caused
the revert.
## Summary
- preserves the original API/implementation commits by cherry-picking
them onto this branch
- fixes the `System.Linq.AsyncEnumerable` test build break by making the
affected async selectorless overload calls explicit where inference was
insufficient during the multi-target build
## Validation
- `build.cmd clr+libs -rc release`
- `.\dotnet.cmd build
.\src\libraries\System.Linq.AsyncEnumerable\tests\System.Linq.AsyncEnumerable.Tests.csproj
/t:Test --no-restore`
- `.\dotnet.cmd build
.\src\libraries\System.Linq\tests\System.Linq.Tests.csproj /t:Test
--no-restore`
- `.\dotnet.cmd build
.\src\libraries\System.Linq.Queryable\tests\System.Linq.Queryable.Tests.csproj
/t:Test --no-restore`
---------
Co-authored-by: Copilot <198982749+Copilot@users.noreply.github.com>
Co-authored-by: Shay Rojansky <roji@roji.org>
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Co-authored-by: roji <1862641+roji@users.noreply.github.com>
@github-actionsgithub-actionsBot locked and limited conversation to collaborators May 8, 2026
Sign up for freeto subscribe to this conversation on GitHub. Already have an account? Sign in.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants

@MichalStrehovsky@danmoseley
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Highlight search terms from Google/DuckDuckGo/Bing referrer\n(function() {\n var ref = document.referrer;\n var terms = [];\n \n if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) {\n var url = new URL(ref);\n var q = url.searchParams.get('q') || url.searchParams.get('p');\n if (q) {\n terms = q.split(/\\s+/).filter(function(t) { return t.length > 2; });\n }\n }\n \n if (terms.length === 0) return;\n \n var style = document.createElement('style');\n style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }';\n document.head.appendChild(style);\n \n function highlight(node) {\n if (node.nodeType === 3) { // text node\n var text = node.textContent;\n var found = false;\n terms.forEach(function(term) {\n var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\') + ')', 'gi');\n if (regex.test(text)) {\n found = true;\n var frag = document.createDocumentFragment();\n var parts = text.split(regex);\n parts.forEach(function(part, i) {\n if (i % 2 === 0) {\n frag.appendChild(document.createTextNode(part));\n } else {\n var span = document.createElement('span');\n span.className = 'userscript-highlight';\n span.textContent = part;\n frag.appendChild(span);\n }\n });\n node.parentNode.replaceChild(frag, node);\n }\n });\n } else if (node.nodeType === 1 && node.childNodes) { // element\n var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT'];\n if (!skipTags.includes(node.tagName)) {\n Array.from(node.childNodes).forEach(highlight);\n }\n }\n }\n \n highlight(document.body);\n \n // Re-highlight on dynamic content\n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1 || node.nodeType === 3) highlight(node);\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Highlight Search Terms"); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Revert "Add GroupJoin overload returning IGrouping" - #126624

Merged
danmoseley merged 2 commits into
mainfrom
revert-121999-copilot/add-tuple-return-overload
Apr 8, 2026
Merged

Revert "Add GroupJoin overload returning IGrouping"#126624
danmoseley merged 2 commits into
mainfrom
revert-121999-copilot/add-tuple-return-overload

Conversation

@MichalStrehovsky

Copy link
Copy Markdown
Member

Reverts #121999

This was merged during CI outage.

src\libraries\System.Linq.AsyncEnumerable\tests\JoinTests.cs(222,32): error CS0411: (NETCORE_ENGINEERING_TELEMETRY=Build) The type arguments for method 'AsyncEnumerable.Join<TOuter, TInner, TKey>(IAsyncEnumerable<TOuter>, IAsyncEnumerable<TInner>, Func<TOuter, TKey>, Func<TInner, TKey>, IEqualityComparer<TKey>?)' cannot be inferred from the usage. Try specifying the type arguments explicitly.

CopilotAI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Reverts the recently-added GroupJoin overloads that returned IGrouping<,> (and their associated test coverage) from System.Linq, System.Linq.Queryable, and System.Linq.AsyncEnumerable, restoring the previous API surface after CI-discovered compilation issues.

Changes:

  • Remove GroupJoin<TOuter,TInner,TKey>(...) -> IEnumerable/IQueryable/IAsyncEnumerable<IGrouping<...>> overloads from implementations and ref assemblies.
  • Delete the corresponding unit tests that validated the removed overloads.
  • Remove now-unused helper grouping types (GroupJoinGrouping, AsyncGroupJoinGrouping) and related using System.Collections; directives.

Reviewed changes

Copilot reviewed 9 out of 9 changed files in this pull request and generated no comments.

Show a summary per file
FileDescription
src/libraries/System.Linq/tests/GroupJoinTests.csRemoves tests targeting the reverted GroupJoin overload without a result selector.
src/libraries/System.Linq/src/System/Linq/GroupJoin.csRemoves the GroupJoin overload returning IGrouping<,> plus its iterator and helper grouping type.
src/libraries/System.Linq/ref/System.Linq.csRemoves the ref declaration for the reverted GroupJoin overload.
src/libraries/System.Linq.Queryable/tests/GroupJoinTests.csRemoves tests targeting the reverted Queryable.GroupJoin overload without a result selector.
src/libraries/System.Linq.Queryable/src/System/Linq/Queryable.csRemoves the Queryable.GroupJoin overload returning IQueryable<IGrouping<,>>.
src/libraries/System.Linq.Queryable/ref/System.Linq.Queryable.csRemoves the ref declaration for the reverted Queryable.GroupJoin overload.
src/libraries/System.Linq.AsyncEnumerable/tests/GroupJoinTests.csRemoves tests targeting the reverted AsyncEnumerable.GroupJoin overloads returning IGrouping<,>.
src/libraries/System.Linq.AsyncEnumerable/src/System/Linq/GroupJoin.csRemoves the AsyncEnumerable.GroupJoin overloads returning IGrouping<,> plus the helper grouping type.
src/libraries/System.Linq.AsyncEnumerable/ref/System.Linq.AsyncEnumerable.csRemoves the ref declarations for the reverted AsyncEnumerable.GroupJoin overloads.

@dotnet-policy-service

Copy link
Copy Markdown
Contributor

Tagging subscribers to this area: @dotnet/area-system-linq
See info in area-owners.md if you want to be subscribed.

@github-actions

This comment has been minimized.

@danmoseley
danmoseley enabled auto-merge (squash) April 8, 2026 03:57
@MichalStrehovsky

Copy link
Copy Markdown
MemberAuthor

We still have a build break. Seems like this is not the only PR in the area path that @eiriktsarpalis merged with /ba-g without running any tests. The other one is #121998. I cannot do a revert of that one from github UI because "Sorry, this pull request couldn’t be reverted automatically. It may have already been reverted, or the content may have changed since it was merged." I assume because these PRs depend on each other.

So I've pushed out a git revert 2916d73755eb875a8803dfbb4d3a72a29cc6bd9b too.

@github-actions

Copy link
Copy Markdown
Contributor

Note

This review was generated by Copilot.

🤖 Copilot Code Review — PR #126624

Holistic Assessment

Motivation: Justified. PRs #121999 (GroupJoin IGrouping<,> overloads) and #121998 (Join/LeftJoin/RightJoin tuple overloads) were merged during a CI outage and introduced a CS0411 type inference ambiguity build error. Reverting both to restore a known-good state on main is the correct response.

Approach: Two clean git revert commits that exactly invert the original additions. All public API surface, implementations, internal helper types, and tests are removed across System.Linq, System.Linq.Queryable, and System.Linq.AsyncEnumerable with no residual artifacts.

Summary: ✅ LGTM. Both reverts are complete and clean. All added surface from #121999 and #121998 is fully removed with no dangling references. The pre-existing overloads (with resultSelector parameters) remain intact and unchanged. The CS0411 build error cited in the PR description is addressed by the second commit's revert of the tuple-returning Join overloads.


Detailed Findings

✅ Revert Completeness — Both PRs fully reverted

Verified that both reverts remove all artifacts:

Commit 1 (796ef57c) — Reverts #121999 (GroupJoin IGrouping overloads):

  • 3 ref assemblies updated: removed GroupJoin<TOuter,TInner,TKey> declarations
  • 3 src files: removed public methods, private iterators, and internal helper classes (GroupJoinGrouping, AsyncGroupJoinGrouping)
  • 3 test files: removed all tests for the reverted overloads

Commit 2 (51a2eb51) — Reverts #121998 (Join/LeftJoin/RightJoin tuple overloads):

  • 3 ref assemblies updated: removed tuple-returning Join, LeftJoin, RightJoin declarations
  • 6 src files (Join.cs, LeftJoin.cs, RightJoin.cs × 2 libraries): removed public methods and private iterators
  • 6 test files: removed all TupleJoin*, TupleLeftJoin*, TupleRightJoin* tests

Confirmed zero remaining references to GroupJoinGrouping, AsyncGroupJoinGrouping, TupleJoin, TupleLeftJoin, or TupleRightJoin in the affected libraries.

✅ No Collateral Damage — Existing overloads untouched

The original resultSelector-based overloads for Join, GroupJoin, LeftJoin, and RightJoin are preserved identically in all three libraries (System.Linq: 5+3+5+5 public methods; AsyncEnumerable: 3+3+3+3 public methods). All existing tests for those overloads are retained. No csproj files were modified — file additions/removals were all within existing source files.

✅ Build Error Addressed — CS0411 resolved

The cited CS0411 error (AsyncEnumerable.Join<TOuter, TInner, TKey> type arguments cannot be inferred) was caused by the tuple-returning Join overloads creating an ambiguity with the resultSelector-based overloads when the compiler attempted type inference. The second commit reverting #121998 directly addresses this.

💡 PR Title and Description — Slightly outdated

The PR title says "Revert 'Add GroupJoin overload returning IGrouping'" and the description only mentions reverting #121999, but the PR now also reverts #121998 (Join/LeftJoin/RightJoin tuple overloads). Consider updating the title/description to reflect both reverts for clarity in the git history.

Generated by Code Review for issue #126624 ·

@MichalStrehovsky

Copy link
Copy Markdown
MemberAuthor

/ba-g wasm legs are broken everywhere, this is unlikely to make them worse since it's a clean revert. the build break is gone.

@danmoseley
danmoseley merged commit 14eeb75 into mainApr 8, 2026
84 of 94 checks passed
@danmoseley
danmoseley deleted the revert-121999-copilot/add-tuple-return-overload branch April 8, 2026 07:34
radekdoulik pushed a commit to radekdoulik/runtime that referenced this pull request Apr 9, 2026
eiriktsarpalis added a commit that referenced this pull request Apr 29, 2026
…26649)
> [!NOTE]
> This PR description was generated with Copilot.
Reinstates the LINQ convenience overloads from #121998 and #121999 that
were reverted in #126624, while also fixing the build break that caused
the revert.
## Summary
- preserves the original API/implementation commits by cherry-picking
them onto this branch
- fixes the `System.Linq.AsyncEnumerable` test build break by making the
affected async selectorless overload calls explicit where inference was
insufficient during the multi-target build
## Validation
- `build.cmd clr+libs -rc release`
- `.\dotnet.cmd build
.\src\libraries\System.Linq.AsyncEnumerable\tests\System.Linq.AsyncEnumerable.Tests.csproj
/t:Test --no-restore`
- `.\dotnet.cmd build
.\src\libraries\System.Linq\tests\System.Linq.Tests.csproj /t:Test
--no-restore`
- `.\dotnet.cmd build
.\src\libraries\System.Linq.Queryable\tests\System.Linq.Queryable.Tests.csproj
/t:Test --no-restore`
---------
Co-authored-by: Copilot <198982749+Copilot@users.noreply.github.com>
Co-authored-by: Shay Rojansky <roji@roji.org>
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Co-authored-by: roji <1862641+roji@users.noreply.github.com>
@github-actionsgithub-actionsBot locked and limited conversation to collaborators May 8, 2026
Sign up for freeto subscribe to this conversation on GitHub. Already have an account? Sign in.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants

@MichalStrehovsky@danmoseley
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Strip utm_, fbclid, gclid, etc. from all links on page\n(function() {\n var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content',\n 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid',\n 'ref', 'ref_src', 'source', 'medium', 'campaign'];\n \n function cleanUrl(url) {\n try {\n var u = new URL(url, window.location.origin);\n var changed = false;\n trackingParams.forEach(function(p) {\n if (u.searchParams.has(p)) {\n u.searchParams.delete(p);\n changed = true;\n }\n });\n return changed ? u.toString() : url;\n } catch (e) {\n return url;\n }\n }\n \n function cleanLinks() {\n document.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n \n cleanLinks();\n \n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1) {\n if (node.tagName === 'A') cleanLinks();\n node.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Remove Tracking Parameters from Links"); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + '
Skip to content

Revert "Add GroupJoin overload returning IGrouping" - #126624

Merged
danmoseley merged 2 commits into
mainfrom
revert-121999-copilot/add-tuple-return-overload
Apr 8, 2026
Merged

Revert "Add GroupJoin overload returning IGrouping"#126624
danmoseley merged 2 commits into
mainfrom
revert-121999-copilot/add-tuple-return-overload

Conversation

@MichalStrehovsky

Copy link
Copy Markdown
Member

Reverts #121999

This was merged during CI outage.

src\libraries\System.Linq.AsyncEnumerable\tests\JoinTests.cs(222,32): error CS0411: (NETCORE_ENGINEERING_TELEMETRY=Build) The type arguments for method 'AsyncEnumerable.Join<TOuter, TInner, TKey>(IAsyncEnumerable<TOuter>, IAsyncEnumerable<TInner>, Func<TOuter, TKey>, Func<TInner, TKey>, IEqualityComparer<TKey>?)' cannot be inferred from the usage. Try specifying the type arguments explicitly.

CopilotAI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Reverts the recently-added GroupJoin overloads that returned IGrouping<,> (and their associated test coverage) from System.Linq, System.Linq.Queryable, and System.Linq.AsyncEnumerable, restoring the previous API surface after CI-discovered compilation issues.

Changes:

  • Remove GroupJoin<TOuter,TInner,TKey>(...) -> IEnumerable/IQueryable/IAsyncEnumerable<IGrouping<...>> overloads from implementations and ref assemblies.
  • Delete the corresponding unit tests that validated the removed overloads.
  • Remove now-unused helper grouping types (GroupJoinGrouping, AsyncGroupJoinGrouping) and related using System.Collections; directives.

Reviewed changes

Copilot reviewed 9 out of 9 changed files in this pull request and generated no comments.

Show a summary per file
FileDescription
src/libraries/System.Linq/tests/GroupJoinTests.csRemoves tests targeting the reverted GroupJoin overload without a result selector.
src/libraries/System.Linq/src/System/Linq/GroupJoin.csRemoves the GroupJoin overload returning IGrouping<,> plus its iterator and helper grouping type.
src/libraries/System.Linq/ref/System.Linq.csRemoves the ref declaration for the reverted GroupJoin overload.
src/libraries/System.Linq.Queryable/tests/GroupJoinTests.csRemoves tests targeting the reverted Queryable.GroupJoin overload without a result selector.
src/libraries/System.Linq.Queryable/src/System/Linq/Queryable.csRemoves the Queryable.GroupJoin overload returning IQueryable<IGrouping<,>>.
src/libraries/System.Linq.Queryable/ref/System.Linq.Queryable.csRemoves the ref declaration for the reverted Queryable.GroupJoin overload.
src/libraries/System.Linq.AsyncEnumerable/tests/GroupJoinTests.csRemoves tests targeting the reverted AsyncEnumerable.GroupJoin overloads returning IGrouping<,>.
src/libraries/System.Linq.AsyncEnumerable/src/System/Linq/GroupJoin.csRemoves the AsyncEnumerable.GroupJoin overloads returning IGrouping<,> plus the helper grouping type.
src/libraries/System.Linq.AsyncEnumerable/ref/System.Linq.AsyncEnumerable.csRemoves the ref declarations for the reverted AsyncEnumerable.GroupJoin overloads.

@dotnet-policy-service

Copy link
Copy Markdown
Contributor

Tagging subscribers to this area: @dotnet/area-system-linq
See info in area-owners.md if you want to be subscribed.

@github-actions

This comment has been minimized.

@danmoseley
danmoseley enabled auto-merge (squash) April 8, 2026 03:57
@MichalStrehovsky

Copy link
Copy Markdown
MemberAuthor

We still have a build break. Seems like this is not the only PR in the area path that @eiriktsarpalis merged with /ba-g without running any tests. The other one is #121998. I cannot do a revert of that one from github UI because "Sorry, this pull request couldn’t be reverted automatically. It may have already been reverted, or the content may have changed since it was merged." I assume because these PRs depend on each other.

So I've pushed out a git revert 2916d73755eb875a8803dfbb4d3a72a29cc6bd9b too.

@github-actions

Copy link
Copy Markdown
Contributor

Note

This review was generated by Copilot.

🤖 Copilot Code Review — PR #126624

Holistic Assessment

Motivation: Justified. PRs #121999 (GroupJoin IGrouping<,> overloads) and #121998 (Join/LeftJoin/RightJoin tuple overloads) were merged during a CI outage and introduced a CS0411 type inference ambiguity build error. Reverting both to restore a known-good state on main is the correct response.

Approach: Two clean git revert commits that exactly invert the original additions. All public API surface, implementations, internal helper types, and tests are removed across System.Linq, System.Linq.Queryable, and System.Linq.AsyncEnumerable with no residual artifacts.

Summary: ✅ LGTM. Both reverts are complete and clean. All added surface from #121999 and #121998 is fully removed with no dangling references. The pre-existing overloads (with resultSelector parameters) remain intact and unchanged. The CS0411 build error cited in the PR description is addressed by the second commit's revert of the tuple-returning Join overloads.


Detailed Findings

✅ Revert Completeness — Both PRs fully reverted

Verified that both reverts remove all artifacts:

Commit 1 (796ef57c) — Reverts #121999 (GroupJoin IGrouping overloads):

  • 3 ref assemblies updated: removed GroupJoin<TOuter,TInner,TKey> declarations
  • 3 src files: removed public methods, private iterators, and internal helper classes (GroupJoinGrouping, AsyncGroupJoinGrouping)
  • 3 test files: removed all tests for the reverted overloads

Commit 2 (51a2eb51) — Reverts #121998 (Join/LeftJoin/RightJoin tuple overloads):

  • 3 ref assemblies updated: removed tuple-returning Join, LeftJoin, RightJoin declarations
  • 6 src files (Join.cs, LeftJoin.cs, RightJoin.cs × 2 libraries): removed public methods and private iterators
  • 6 test files: removed all TupleJoin*, TupleLeftJoin*, TupleRightJoin* tests

Confirmed zero remaining references to GroupJoinGrouping, AsyncGroupJoinGrouping, TupleJoin, TupleLeftJoin, or TupleRightJoin in the affected libraries.

✅ No Collateral Damage — Existing overloads untouched

The original resultSelector-based overloads for Join, GroupJoin, LeftJoin, and RightJoin are preserved identically in all three libraries (System.Linq: 5+3+5+5 public methods; AsyncEnumerable: 3+3+3+3 public methods). All existing tests for those overloads are retained. No csproj files were modified — file additions/removals were all within existing source files.

✅ Build Error Addressed — CS0411 resolved

The cited CS0411 error (AsyncEnumerable.Join<TOuter, TInner, TKey> type arguments cannot be inferred) was caused by the tuple-returning Join overloads creating an ambiguity with the resultSelector-based overloads when the compiler attempted type inference. The second commit reverting #121998 directly addresses this.

💡 PR Title and Description — Slightly outdated

The PR title says "Revert 'Add GroupJoin overload returning IGrouping'" and the description only mentions reverting #121999, but the PR now also reverts #121998 (Join/LeftJoin/RightJoin tuple overloads). Consider updating the title/description to reflect both reverts for clarity in the git history.

Generated by Code Review for issue #126624 ·

@MichalStrehovsky

Copy link
Copy Markdown
MemberAuthor

/ba-g wasm legs are broken everywhere, this is unlikely to make them worse since it's a clean revert. the build break is gone.

@danmoseley
danmoseley merged commit 14eeb75 into mainApr 8, 2026
84 of 94 checks passed
@danmoseley
danmoseley deleted the revert-121999-copilot/add-tuple-return-overload branch April 8, 2026 07:34
radekdoulik pushed a commit to radekdoulik/runtime that referenced this pull request Apr 9, 2026
eiriktsarpalis added a commit that referenced this pull request Apr 29, 2026
…26649)
> [!NOTE]
> This PR description was generated with Copilot.
Reinstates the LINQ convenience overloads from #121998 and #121999 that
were reverted in #126624, while also fixing the build break that caused
the revert.
## Summary
- preserves the original API/implementation commits by cherry-picking
them onto this branch
- fixes the `System.Linq.AsyncEnumerable` test build break by making the
affected async selectorless overload calls explicit where inference was
insufficient during the multi-target build
## Validation
- `build.cmd clr+libs -rc release`
- `.\dotnet.cmd build
.\src\libraries\System.Linq.AsyncEnumerable\tests\System.Linq.AsyncEnumerable.Tests.csproj
/t:Test --no-restore`
- `.\dotnet.cmd build
.\src\libraries\System.Linq\tests\System.Linq.Tests.csproj /t:Test
--no-restore`
- `.\dotnet.cmd build
.\src\libraries\System.Linq.Queryable\tests\System.Linq.Queryable.Tests.csproj
/t:Test --no-restore`
---------
Co-authored-by: Copilot <198982749+Copilot@users.noreply.github.com>
Co-authored-by: Shay Rojansky <roji@roji.org>
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Co-authored-by: roji <1862641+roji@users.noreply.github.com>
@github-actionsgithub-actionsBot locked and limited conversation to collaborators May 8, 2026
Sign up for freeto subscribe to this conversation on GitHub. Already have an account? Sign in.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants

@MichalStrehovsky@danmoseley
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Auto-enable theater mode on YouTube\n(function() {\n function tryTheater() {\n var btn = document.querySelector('button[aria-label=\"Theater mode\"], ytd-player #player button[title=\"Theater mode\"]');\n if (btn && !btn.classList.contains('activated')) {\n btn.click();\n }\n }\n \n // Try immediately\n tryTheater();\n \n // Try after navigation (SPA)\n var lastUrl = location.href;\n setInterval(function() {\n if (location.href !== lastUrl) {\n lastUrl = location.href;\n setTimeout(tryTheater, 500);\n }\n }, 1000);\n \n // Also try on player load\n var observer = new MutationObserver(tryTheater);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "YouTube Theater Mode Default"); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Revert "Add GroupJoin overload returning IGrouping" - #126624

Merged
danmoseley merged 2 commits into
mainfrom
revert-121999-copilot/add-tuple-return-overload
Apr 8, 2026
Merged

Revert "Add GroupJoin overload returning IGrouping"#126624
danmoseley merged 2 commits into
mainfrom
revert-121999-copilot/add-tuple-return-overload

Conversation

@MichalStrehovsky

Copy link
Copy Markdown
Member

Reverts #121999

This was merged during CI outage.

src\libraries\System.Linq.AsyncEnumerable\tests\JoinTests.cs(222,32): error CS0411: (NETCORE_ENGINEERING_TELEMETRY=Build) The type arguments for method 'AsyncEnumerable.Join<TOuter, TInner, TKey>(IAsyncEnumerable<TOuter>, IAsyncEnumerable<TInner>, Func<TOuter, TKey>, Func<TInner, TKey>, IEqualityComparer<TKey>?)' cannot be inferred from the usage. Try specifying the type arguments explicitly.

CopilotAI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Reverts the recently-added GroupJoin overloads that returned IGrouping<,> (and their associated test coverage) from System.Linq, System.Linq.Queryable, and System.Linq.AsyncEnumerable, restoring the previous API surface after CI-discovered compilation issues.

Changes:

  • Remove GroupJoin<TOuter,TInner,TKey>(...) -> IEnumerable/IQueryable/IAsyncEnumerable<IGrouping<...>> overloads from implementations and ref assemblies.
  • Delete the corresponding unit tests that validated the removed overloads.
  • Remove now-unused helper grouping types (GroupJoinGrouping, AsyncGroupJoinGrouping) and related using System.Collections; directives.

Reviewed changes

Copilot reviewed 9 out of 9 changed files in this pull request and generated no comments.

Show a summary per file
FileDescription
src/libraries/System.Linq/tests/GroupJoinTests.csRemoves tests targeting the reverted GroupJoin overload without a result selector.
src/libraries/System.Linq/src/System/Linq/GroupJoin.csRemoves the GroupJoin overload returning IGrouping<,> plus its iterator and helper grouping type.
src/libraries/System.Linq/ref/System.Linq.csRemoves the ref declaration for the reverted GroupJoin overload.
src/libraries/System.Linq.Queryable/tests/GroupJoinTests.csRemoves tests targeting the reverted Queryable.GroupJoin overload without a result selector.
src/libraries/System.Linq.Queryable/src/System/Linq/Queryable.csRemoves the Queryable.GroupJoin overload returning IQueryable<IGrouping<,>>.
src/libraries/System.Linq.Queryable/ref/System.Linq.Queryable.csRemoves the ref declaration for the reverted Queryable.GroupJoin overload.
src/libraries/System.Linq.AsyncEnumerable/tests/GroupJoinTests.csRemoves tests targeting the reverted AsyncEnumerable.GroupJoin overloads returning IGrouping<,>.
src/libraries/System.Linq.AsyncEnumerable/src/System/Linq/GroupJoin.csRemoves the AsyncEnumerable.GroupJoin overloads returning IGrouping<,> plus the helper grouping type.
src/libraries/System.Linq.AsyncEnumerable/ref/System.Linq.AsyncEnumerable.csRemoves the ref declarations for the reverted AsyncEnumerable.GroupJoin overloads.

@dotnet-policy-service

Copy link
Copy Markdown
Contributor

Tagging subscribers to this area: @dotnet/area-system-linq
See info in area-owners.md if you want to be subscribed.

@github-actions

This comment has been minimized.

@danmoseley
danmoseley enabled auto-merge (squash) April 8, 2026 03:57
@MichalStrehovsky

Copy link
Copy Markdown
MemberAuthor

We still have a build break. Seems like this is not the only PR in the area path that @eiriktsarpalis merged with /ba-g without running any tests. The other one is #121998. I cannot do a revert of that one from github UI because "Sorry, this pull request couldn’t be reverted automatically. It may have already been reverted, or the content may have changed since it was merged." I assume because these PRs depend on each other.

So I've pushed out a git revert 2916d73755eb875a8803dfbb4d3a72a29cc6bd9b too.

@github-actions

Copy link
Copy Markdown
Contributor

Note

This review was generated by Copilot.

🤖 Copilot Code Review — PR #126624

Holistic Assessment

Motivation: Justified. PRs #121999 (GroupJoin IGrouping<,> overloads) and #121998 (Join/LeftJoin/RightJoin tuple overloads) were merged during a CI outage and introduced a CS0411 type inference ambiguity build error. Reverting both to restore a known-good state on main is the correct response.

Approach: Two clean git revert commits that exactly invert the original additions. All public API surface, implementations, internal helper types, and tests are removed across System.Linq, System.Linq.Queryable, and System.Linq.AsyncEnumerable with no residual artifacts.

Summary: ✅ LGTM. Both reverts are complete and clean. All added surface from #121999 and #121998 is fully removed with no dangling references. The pre-existing overloads (with resultSelector parameters) remain intact and unchanged. The CS0411 build error cited in the PR description is addressed by the second commit's revert of the tuple-returning Join overloads.


Detailed Findings

✅ Revert Completeness — Both PRs fully reverted

Verified that both reverts remove all artifacts:

Commit 1 (796ef57c) — Reverts #121999 (GroupJoin IGrouping overloads):

  • 3 ref assemblies updated: removed GroupJoin<TOuter,TInner,TKey> declarations
  • 3 src files: removed public methods, private iterators, and internal helper classes (GroupJoinGrouping, AsyncGroupJoinGrouping)
  • 3 test files: removed all tests for the reverted overloads

Commit 2 (51a2eb51) — Reverts #121998 (Join/LeftJoin/RightJoin tuple overloads):

  • 3 ref assemblies updated: removed tuple-returning Join, LeftJoin, RightJoin declarations
  • 6 src files (Join.cs, LeftJoin.cs, RightJoin.cs × 2 libraries): removed public methods and private iterators
  • 6 test files: removed all TupleJoin*, TupleLeftJoin*, TupleRightJoin* tests

Confirmed zero remaining references to GroupJoinGrouping, AsyncGroupJoinGrouping, TupleJoin, TupleLeftJoin, or TupleRightJoin in the affected libraries.

✅ No Collateral Damage — Existing overloads untouched

The original resultSelector-based overloads for Join, GroupJoin, LeftJoin, and RightJoin are preserved identically in all three libraries (System.Linq: 5+3+5+5 public methods; AsyncEnumerable: 3+3+3+3 public methods). All existing tests for those overloads are retained. No csproj files were modified — file additions/removals were all within existing source files.

✅ Build Error Addressed — CS0411 resolved

The cited CS0411 error (AsyncEnumerable.Join<TOuter, TInner, TKey> type arguments cannot be inferred) was caused by the tuple-returning Join overloads creating an ambiguity with the resultSelector-based overloads when the compiler attempted type inference. The second commit reverting #121998 directly addresses this.

💡 PR Title and Description — Slightly outdated

The PR title says "Revert 'Add GroupJoin overload returning IGrouping'" and the description only mentions reverting #121999, but the PR now also reverts #121998 (Join/LeftJoin/RightJoin tuple overloads). Consider updating the title/description to reflect both reverts for clarity in the git history.

Generated by Code Review for issue #126624 ·

@MichalStrehovsky

Copy link
Copy Markdown
MemberAuthor

/ba-g wasm legs are broken everywhere, this is unlikely to make them worse since it's a clean revert. the build break is gone.

@danmoseley
danmoseley merged commit 14eeb75 into mainApr 8, 2026
84 of 94 checks passed
@danmoseley
danmoseley deleted the revert-121999-copilot/add-tuple-return-overload branch April 8, 2026 07:34
radekdoulik pushed a commit to radekdoulik/runtime that referenced this pull request Apr 9, 2026
eiriktsarpalis added a commit that referenced this pull request Apr 29, 2026
…26649)
> [!NOTE]
> This PR description was generated with Copilot.
Reinstates the LINQ convenience overloads from #121998 and #121999 that
were reverted in #126624, while also fixing the build break that caused
the revert.
## Summary
- preserves the original API/implementation commits by cherry-picking
them onto this branch
- fixes the `System.Linq.AsyncEnumerable` test build break by making the
affected async selectorless overload calls explicit where inference was
insufficient during the multi-target build
## Validation
- `build.cmd clr+libs -rc release`
- `.\dotnet.cmd build
.\src\libraries\System.Linq.AsyncEnumerable\tests\System.Linq.AsyncEnumerable.Tests.csproj
/t:Test --no-restore`
- `.\dotnet.cmd build
.\src\libraries\System.Linq\tests\System.Linq.Tests.csproj /t:Test
--no-restore`
- `.\dotnet.cmd build
.\src\libraries\System.Linq.Queryable\tests\System.Linq.Queryable.Tests.csproj
/t:Test --no-restore`
---------
Co-authored-by: Copilot <198982749+Copilot@users.noreply.github.com>
Co-authored-by: Shay Rojansky <roji@roji.org>
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Co-authored-by: roji <1862641+roji@users.noreply.github.com>
@github-actionsgithub-actionsBot locked and limited conversation to collaborators May 8, 2026
Sign up for freeto subscribe to this conversation on GitHub. Already have an account? Sign in.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants

@MichalStrehovsky@danmoseley
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Remove or un-stick sticky/fixed headers that block content\n(function() {\n function unstick() {\n document.querySelectorAll('header, nav, [role=\"banner\"], .header, .navbar, .sticky, .fixed-top, [style*=\"position: fixed\"], [style*=\"position:sticky\"]').forEach(function(el) {\n if (el.style.position === 'fixed' || el.style.position === 'sticky' || \n getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') {\n el.style.position = 'static';\n el.style.top = 'auto';\n el.style.zIndex = 'auto';\n }\n });\n }\n \n unstick();\n \n var observer = new MutationObserver(unstick);\n observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] });\n})();", "Kill Sticky Headers"); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Revert "Add GroupJoin overload returning IGrouping" - #126624

Merged
danmoseley merged 2 commits into
mainfrom
revert-121999-copilot/add-tuple-return-overload
Apr 8, 2026
Merged

Revert "Add GroupJoin overload returning IGrouping"#126624
danmoseley merged 2 commits into
mainfrom
revert-121999-copilot/add-tuple-return-overload

Conversation

@MichalStrehovsky

Copy link
Copy Markdown
Member

Reverts #121999

This was merged during CI outage.

src\libraries\System.Linq.AsyncEnumerable\tests\JoinTests.cs(222,32): error CS0411: (NETCORE_ENGINEERING_TELEMETRY=Build) The type arguments for method 'AsyncEnumerable.Join<TOuter, TInner, TKey>(IAsyncEnumerable<TOuter>, IAsyncEnumerable<TInner>, Func<TOuter, TKey>, Func<TInner, TKey>, IEqualityComparer<TKey>?)' cannot be inferred from the usage. Try specifying the type arguments explicitly.

CopilotAI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Reverts the recently-added GroupJoin overloads that returned IGrouping<,> (and their associated test coverage) from System.Linq, System.Linq.Queryable, and System.Linq.AsyncEnumerable, restoring the previous API surface after CI-discovered compilation issues.

Changes:

  • Remove GroupJoin<TOuter,TInner,TKey>(...) -> IEnumerable/IQueryable/IAsyncEnumerable<IGrouping<...>> overloads from implementations and ref assemblies.
  • Delete the corresponding unit tests that validated the removed overloads.
  • Remove now-unused helper grouping types (GroupJoinGrouping, AsyncGroupJoinGrouping) and related using System.Collections; directives.

Reviewed changes

Copilot reviewed 9 out of 9 changed files in this pull request and generated no comments.

Show a summary per file
FileDescription
src/libraries/System.Linq/tests/GroupJoinTests.csRemoves tests targeting the reverted GroupJoin overload without a result selector.
src/libraries/System.Linq/src/System/Linq/GroupJoin.csRemoves the GroupJoin overload returning IGrouping<,> plus its iterator and helper grouping type.
src/libraries/System.Linq/ref/System.Linq.csRemoves the ref declaration for the reverted GroupJoin overload.
src/libraries/System.Linq.Queryable/tests/GroupJoinTests.csRemoves tests targeting the reverted Queryable.GroupJoin overload without a result selector.
src/libraries/System.Linq.Queryable/src/System/Linq/Queryable.csRemoves the Queryable.GroupJoin overload returning IQueryable<IGrouping<,>>.
src/libraries/System.Linq.Queryable/ref/System.Linq.Queryable.csRemoves the ref declaration for the reverted Queryable.GroupJoin overload.
src/libraries/System.Linq.AsyncEnumerable/tests/GroupJoinTests.csRemoves tests targeting the reverted AsyncEnumerable.GroupJoin overloads returning IGrouping<,>.
src/libraries/System.Linq.AsyncEnumerable/src/System/Linq/GroupJoin.csRemoves the AsyncEnumerable.GroupJoin overloads returning IGrouping<,> plus the helper grouping type.
src/libraries/System.Linq.AsyncEnumerable/ref/System.Linq.AsyncEnumerable.csRemoves the ref declarations for the reverted AsyncEnumerable.GroupJoin overloads.

@dotnet-policy-service

Copy link
Copy Markdown
Contributor

Tagging subscribers to this area: @dotnet/area-system-linq
See info in area-owners.md if you want to be subscribed.

@github-actions

This comment has been minimized.

@danmoseley
danmoseley enabled auto-merge (squash) April 8, 2026 03:57
@MichalStrehovsky

Copy link
Copy Markdown
MemberAuthor

We still have a build break. Seems like this is not the only PR in the area path that @eiriktsarpalis merged with /ba-g without running any tests. The other one is #121998. I cannot do a revert of that one from github UI because "Sorry, this pull request couldn’t be reverted automatically. It may have already been reverted, or the content may have changed since it was merged." I assume because these PRs depend on each other.

So I've pushed out a git revert 2916d73755eb875a8803dfbb4d3a72a29cc6bd9b too.

@github-actions

Copy link
Copy Markdown
Contributor

Note

This review was generated by Copilot.

🤖 Copilot Code Review — PR #126624

Holistic Assessment

Motivation: Justified. PRs #121999 (GroupJoin IGrouping<,> overloads) and #121998 (Join/LeftJoin/RightJoin tuple overloads) were merged during a CI outage and introduced a CS0411 type inference ambiguity build error. Reverting both to restore a known-good state on main is the correct response.

Approach: Two clean git revert commits that exactly invert the original additions. All public API surface, implementations, internal helper types, and tests are removed across System.Linq, System.Linq.Queryable, and System.Linq.AsyncEnumerable with no residual artifacts.

Summary: ✅ LGTM. Both reverts are complete and clean. All added surface from #121999 and #121998 is fully removed with no dangling references. The pre-existing overloads (with resultSelector parameters) remain intact and unchanged. The CS0411 build error cited in the PR description is addressed by the second commit's revert of the tuple-returning Join overloads.


Detailed Findings

✅ Revert Completeness — Both PRs fully reverted

Verified that both reverts remove all artifacts:

Commit 1 (796ef57c) — Reverts #121999 (GroupJoin IGrouping overloads):

  • 3 ref assemblies updated: removed GroupJoin<TOuter,TInner,TKey> declarations
  • 3 src files: removed public methods, private iterators, and internal helper classes (GroupJoinGrouping, AsyncGroupJoinGrouping)
  • 3 test files: removed all tests for the reverted overloads

Commit 2 (51a2eb51) — Reverts #121998 (Join/LeftJoin/RightJoin tuple overloads):

  • 3 ref assemblies updated: removed tuple-returning Join, LeftJoin, RightJoin declarations
  • 6 src files (Join.cs, LeftJoin.cs, RightJoin.cs × 2 libraries): removed public methods and private iterators
  • 6 test files: removed all TupleJoin*, TupleLeftJoin*, TupleRightJoin* tests

Confirmed zero remaining references to GroupJoinGrouping, AsyncGroupJoinGrouping, TupleJoin, TupleLeftJoin, or TupleRightJoin in the affected libraries.

✅ No Collateral Damage — Existing overloads untouched

The original resultSelector-based overloads for Join, GroupJoin, LeftJoin, and RightJoin are preserved identically in all three libraries (System.Linq: 5+3+5+5 public methods; AsyncEnumerable: 3+3+3+3 public methods). All existing tests for those overloads are retained. No csproj files were modified — file additions/removals were all within existing source files.

✅ Build Error Addressed — CS0411 resolved

The cited CS0411 error (AsyncEnumerable.Join<TOuter, TInner, TKey> type arguments cannot be inferred) was caused by the tuple-returning Join overloads creating an ambiguity with the resultSelector-based overloads when the compiler attempted type inference. The second commit reverting #121998 directly addresses this.

💡 PR Title and Description — Slightly outdated

The PR title says "Revert 'Add GroupJoin overload returning IGrouping'" and the description only mentions reverting #121999, but the PR now also reverts #121998 (Join/LeftJoin/RightJoin tuple overloads). Consider updating the title/description to reflect both reverts for clarity in the git history.

Generated by Code Review for issue #126624 ·

@MichalStrehovsky

Copy link
Copy Markdown
MemberAuthor

/ba-g wasm legs are broken everywhere, this is unlikely to make them worse since it's a clean revert. the build break is gone.

@danmoseley
danmoseley merged commit 14eeb75 into mainApr 8, 2026
84 of 94 checks passed
@danmoseley
danmoseley deleted the revert-121999-copilot/add-tuple-return-overload branch April 8, 2026 07:34
radekdoulik pushed a commit to radekdoulik/runtime that referenced this pull request Apr 9, 2026
eiriktsarpalis added a commit that referenced this pull request Apr 29, 2026
…26649)
> [!NOTE]
> This PR description was generated with Copilot.
Reinstates the LINQ convenience overloads from #121998 and #121999 that
were reverted in #126624, while also fixing the build break that caused
the revert.
## Summary
- preserves the original API/implementation commits by cherry-picking
them onto this branch
- fixes the `System.Linq.AsyncEnumerable` test build break by making the
affected async selectorless overload calls explicit where inference was
insufficient during the multi-target build
## Validation
- `build.cmd clr+libs -rc release`
- `.\dotnet.cmd build
.\src\libraries\System.Linq.AsyncEnumerable\tests\System.Linq.AsyncEnumerable.Tests.csproj
/t:Test --no-restore`
- `.\dotnet.cmd build
.\src\libraries\System.Linq\tests\System.Linq.Tests.csproj /t:Test
--no-restore`
- `.\dotnet.cmd build
.\src\libraries\System.Linq.Queryable\tests\System.Linq.Queryable.Tests.csproj
/t:Test --no-restore`
---------
Co-authored-by: Copilot <198982749+Copilot@users.noreply.github.com>
Co-authored-by: Shay Rojansky <roji@roji.org>
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Co-authored-by: roji <1862641+roji@users.noreply.github.com>
@github-actionsgithub-actionsBot locked and limited conversation to collaborators May 8, 2026
Sign up for freeto subscribe to this conversation on GitHub. Already have an account? Sign in.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants

@MichalStrehovsky@danmoseley
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Universal Dark Mode - works on any site\n(function() {\n var enabled = true;\n \n function applyDarkMode() {\n if (!enabled) return;\n \n // Create style element if it doesn't exist\n var style = document.getElementById('universal-dark-mode-style');\n if (!style) {\n style = document.createElement('style');\n style.id = 'universal-dark-mode-style';\n document.head.appendChild(style);\n }\n \n // Dark mode CSS - inverts colors but preserves images/video\n style.textContent = '\n /* Invert everything except media */\n html {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #1a1a2e !important;\n }\n \n /* Restore images, videos, iframes, canvas */\n img, video, iframe, canvas, svg, picture, [style*=\"background-image\"] {\n filter: invert(1) hue-rotate(180deg) !important;\n }\n \n /* Preserve specific elements that should not be inverted */\n .no-dark-mode, .no-dark-mode *,\n [data-theme=\"light\"], [data-theme=\"light\"],\n .ace_editor, .ace_editor *,\n .CodeMirror, .CodeMirror *,\n .monaco-editor, .monaco-editor *,\n .markdown-body pre, .markdown-body pre *,\n .highlight, .highlight *,\n pre code, pre code * {\n filter: none !important;\n }\n \n /* Fix common UI elements */\n .modal, .popup, .dropdown-menu, .tooltip, .popover {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #2d2d44 !important;\n border-color: #444 !important;\n }\n \n /* Scrollbars */\n ::-webkit-scrollbar { background: #1a1a2e !important; }\n ::-webkit-scrollbar-thumb { background: #444 !important; }\n ::-webkit-scrollbar-thumb:hover { background: #555 !important; }\n \n /* Selection */\n ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ';\n }\n \n function removeDarkMode() {\n var style = document.getElementById('universal-dark-mode-style');\n if (style) style.remove();\n }\n \n // Toggle with Alt+Shift+D\n document.addEventListener('keydown', function(e) {\n if (e.altKey && e.shiftKey && e.key === 'D') {\n e.preventDefault();\n enabled = !enabled;\n if (enabled) {\n applyDarkMode();\n console.log('[Universal Dark Mode] Enabled');\n } else {\n removeDarkMode();\n console.log('[Universal Dark Mode] Disabled');\n }\n }\n });\n \n // Apply on load\n applyDarkMode();\n \n // Re-apply on dynamic content\n var observer = new MutationObserver(function(mutations) {\n if (enabled && !document.getElementById('universal-dark-mode-style')) {\n applyDarkMode();\n }\n });\n observer.observe(document.head, { childList: true });\n \n console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle');\n})();", "Universal Dark Mode"); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })();
Skip to content

Revert "Add GroupJoin overload returning IGrouping" - #126624

Merged
danmoseley merged 2 commits into
mainfrom
revert-121999-copilot/add-tuple-return-overload
Apr 8, 2026
Merged

Revert "Add GroupJoin overload returning IGrouping"#126624
danmoseley merged 2 commits into
mainfrom
revert-121999-copilot/add-tuple-return-overload

Conversation

@MichalStrehovsky

Copy link
Copy Markdown
Member

Reverts #121999

This was merged during CI outage.

src\libraries\System.Linq.AsyncEnumerable\tests\JoinTests.cs(222,32): error CS0411: (NETCORE_ENGINEERING_TELEMETRY=Build) The type arguments for method 'AsyncEnumerable.Join<TOuter, TInner, TKey>(IAsyncEnumerable<TOuter>, IAsyncEnumerable<TInner>, Func<TOuter, TKey>, Func<TInner, TKey>, IEqualityComparer<TKey>?)' cannot be inferred from the usage. Try specifying the type arguments explicitly.

CopilotAI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Reverts the recently-added GroupJoin overloads that returned IGrouping<,> (and their associated test coverage) from System.Linq, System.Linq.Queryable, and System.Linq.AsyncEnumerable, restoring the previous API surface after CI-discovered compilation issues.

Changes:

  • Remove GroupJoin<TOuter,TInner,TKey>(...) -> IEnumerable/IQueryable/IAsyncEnumerable<IGrouping<...>> overloads from implementations and ref assemblies.
  • Delete the corresponding unit tests that validated the removed overloads.
  • Remove now-unused helper grouping types (GroupJoinGrouping, AsyncGroupJoinGrouping) and related using System.Collections; directives.

Reviewed changes

Copilot reviewed 9 out of 9 changed files in this pull request and generated no comments.

Show a summary per file
FileDescription
src/libraries/System.Linq/tests/GroupJoinTests.csRemoves tests targeting the reverted GroupJoin overload without a result selector.
src/libraries/System.Linq/src/System/Linq/GroupJoin.csRemoves the GroupJoin overload returning IGrouping<,> plus its iterator and helper grouping type.
src/libraries/System.Linq/ref/System.Linq.csRemoves the ref declaration for the reverted GroupJoin overload.
src/libraries/System.Linq.Queryable/tests/GroupJoinTests.csRemoves tests targeting the reverted Queryable.GroupJoin overload without a result selector.
src/libraries/System.Linq.Queryable/src/System/Linq/Queryable.csRemoves the Queryable.GroupJoin overload returning IQueryable<IGrouping<,>>.
src/libraries/System.Linq.Queryable/ref/System.Linq.Queryable.csRemoves the ref declaration for the reverted Queryable.GroupJoin overload.
src/libraries/System.Linq.AsyncEnumerable/tests/GroupJoinTests.csRemoves tests targeting the reverted AsyncEnumerable.GroupJoin overloads returning IGrouping<,>.
src/libraries/System.Linq.AsyncEnumerable/src/System/Linq/GroupJoin.csRemoves the AsyncEnumerable.GroupJoin overloads returning IGrouping<,> plus the helper grouping type.
src/libraries/System.Linq.AsyncEnumerable/ref/System.Linq.AsyncEnumerable.csRemoves the ref declarations for the reverted AsyncEnumerable.GroupJoin overloads.

@dotnet-policy-service

Copy link
Copy Markdown
Contributor

Tagging subscribers to this area: @dotnet/area-system-linq
See info in area-owners.md if you want to be subscribed.

@github-actions

This comment has been minimized.

@danmoseley
danmoseley enabled auto-merge (squash) April 8, 2026 03:57
@MichalStrehovsky

Copy link
Copy Markdown
MemberAuthor

We still have a build break. Seems like this is not the only PR in the area path that @eiriktsarpalis merged with /ba-g without running any tests. The other one is #121998. I cannot do a revert of that one from github UI because "Sorry, this pull request couldn’t be reverted automatically. It may have already been reverted, or the content may have changed since it was merged." I assume because these PRs depend on each other.

So I've pushed out a git revert 2916d73755eb875a8803dfbb4d3a72a29cc6bd9b too.

@github-actions

Copy link
Copy Markdown
Contributor

Note

This review was generated by Copilot.

🤖 Copilot Code Review — PR #126624

Holistic Assessment

Motivation: Justified. PRs #121999 (GroupJoin IGrouping<,> overloads) and #121998 (Join/LeftJoin/RightJoin tuple overloads) were merged during a CI outage and introduced a CS0411 type inference ambiguity build error. Reverting both to restore a known-good state on main is the correct response.

Approach: Two clean git revert commits that exactly invert the original additions. All public API surface, implementations, internal helper types, and tests are removed across System.Linq, System.Linq.Queryable, and System.Linq.AsyncEnumerable with no residual artifacts.

Summary: ✅ LGTM. Both reverts are complete and clean. All added surface from #121999 and #121998 is fully removed with no dangling references. The pre-existing overloads (with resultSelector parameters) remain intact and unchanged. The CS0411 build error cited in the PR description is addressed by the second commit's revert of the tuple-returning Join overloads.


Detailed Findings

✅ Revert Completeness — Both PRs fully reverted

Verified that both reverts remove all artifacts:

Commit 1 (796ef57c) — Reverts #121999 (GroupJoin IGrouping overloads):

  • 3 ref assemblies updated: removed GroupJoin<TOuter,TInner,TKey> declarations
  • 3 src files: removed public methods, private iterators, and internal helper classes (GroupJoinGrouping, AsyncGroupJoinGrouping)
  • 3 test files: removed all tests for the reverted overloads

Commit 2 (51a2eb51) — Reverts #121998 (Join/LeftJoin/RightJoin tuple overloads):

  • 3 ref assemblies updated: removed tuple-returning Join, LeftJoin, RightJoin declarations
  • 6 src files (Join.cs, LeftJoin.cs, RightJoin.cs × 2 libraries): removed public methods and private iterators
  • 6 test files: removed all TupleJoin*, TupleLeftJoin*, TupleRightJoin* tests

Confirmed zero remaining references to GroupJoinGrouping, AsyncGroupJoinGrouping, TupleJoin, TupleLeftJoin, or TupleRightJoin in the affected libraries.

✅ No Collateral Damage — Existing overloads untouched

The original resultSelector-based overloads for Join, GroupJoin, LeftJoin, and RightJoin are preserved identically in all three libraries (System.Linq: 5+3+5+5 public methods; AsyncEnumerable: 3+3+3+3 public methods). All existing tests for those overloads are retained. No csproj files were modified — file additions/removals were all within existing source files.

✅ Build Error Addressed — CS0411 resolved

The cited CS0411 error (AsyncEnumerable.Join<TOuter, TInner, TKey> type arguments cannot be inferred) was caused by the tuple-returning Join overloads creating an ambiguity with the resultSelector-based overloads when the compiler attempted type inference. The second commit reverting #121998 directly addresses this.

💡 PR Title and Description — Slightly outdated

The PR title says "Revert 'Add GroupJoin overload returning IGrouping'" and the description only mentions reverting #121999, but the PR now also reverts #121998 (Join/LeftJoin/RightJoin tuple overloads). Consider updating the title/description to reflect both reverts for clarity in the git history.

Generated by Code Review for issue #126624 ·

@MichalStrehovsky

Copy link
Copy Markdown
MemberAuthor

/ba-g wasm legs are broken everywhere, this is unlikely to make them worse since it's a clean revert. the build break is gone.

@danmoseley
danmoseley merged commit 14eeb75 into mainApr 8, 2026
84 of 94 checks passed
@danmoseley
danmoseley deleted the revert-121999-copilot/add-tuple-return-overload branch April 8, 2026 07:34
radekdoulik pushed a commit to radekdoulik/runtime that referenced this pull request Apr 9, 2026
eiriktsarpalis added a commit that referenced this pull request Apr 29, 2026
…26649)
> [!NOTE]
> This PR description was generated with Copilot.
Reinstates the LINQ convenience overloads from #121998 and #121999 that
were reverted in #126624, while also fixing the build break that caused
the revert.
## Summary
- preserves the original API/implementation commits by cherry-picking
them onto this branch
- fixes the `System.Linq.AsyncEnumerable` test build break by making the
affected async selectorless overload calls explicit where inference was
insufficient during the multi-target build
## Validation
- `build.cmd clr+libs -rc release`
- `.\dotnet.cmd build
.\src\libraries\System.Linq.AsyncEnumerable\tests\System.Linq.AsyncEnumerable.Tests.csproj
/t:Test --no-restore`
- `.\dotnet.cmd build
.\src\libraries\System.Linq\tests\System.Linq.Tests.csproj /t:Test
--no-restore`
- `.\dotnet.cmd build
.\src\libraries\System.Linq.Queryable\tests\System.Linq.Queryable.Tests.csproj
/t:Test --no-restore`
---------
Co-authored-by: Copilot <198982749+Copilot@users.noreply.github.com>
Co-authored-by: Shay Rojansky <roji@roji.org>
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Co-authored-by: roji <1862641+roji@users.noreply.github.com>
@github-actionsgithub-actionsBot locked and limited conversation to collaborators May 8, 2026
Sign up for freeto subscribe to this conversation on GitHub. Already have an account? Sign in.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants

@MichalStrehovsky@danmoseley