66using ICSharpCode . CodeConverter . Util ;
77using Microsoft . CodeAnalysis ;
88using Microsoft . CodeAnalysis . CSharp ;
9+ using Microsoft . CodeAnalysis . Operations ;
910using Microsoft . CodeAnalysis . VisualBasic . Syntax ;
1011using CSSyntax = Microsoft . CodeAnalysis . CSharp . Syntax ;
1112using VBSyntax = Microsoft . CodeAnalysis . VisualBasic . Syntax ;
@@ -18,11 +19,13 @@ namespace ICSharpCode.CodeConverter.CSharp
1819 internal class QueryConverter
1920 {
2021 private readonly CommentConvertingVisitorWrapper _triviaConvertingVisitor ;
22+ private SemanticModel _semanticModel ;
2123
22- public QueryConverter ( CommonConversions commonConversions , CommentConvertingVisitorWrapper triviaConvertingVisitor )
24+ public QueryConverter ( CommonConversions commonConversions , SemanticModel semanticModel , CommentConvertingVisitorWrapper triviaConvertingExpressionVisitor )
2325 {
2426 CommonConversions = commonConversions ;
25- _triviaConvertingVisitor = triviaConvertingVisitor ;
27+ _semanticModel = semanticModel ;
28+ _triviaConvertingVisitor = triviaConvertingExpressionVisitor ;
2629 }
2730
2831 private CommonConversions CommonConversions { get ; }
@@ -239,9 +242,15 @@ private static bool RequiredContinuation(VBSyntax.QueryClauseSyntax queryClauseS
239242 private async Task < CSSyntax . FromClauseSyntax > ConvertFromClauseSyntaxAsync ( VBSyntax . FromClauseSyntax vbFromClause )
240243 {
241244 var collectionRangeVariableSyntax = vbFromClause . Variables . Single ( ) ;
245+ var expression = ( CSSyntax . ExpressionSyntax ) await collectionRangeVariableSyntax . Expression . AcceptAsync ( _triviaConvertingVisitor ) ;
246+ var parentOperation = _semanticModel . GetOperation ( collectionRangeVariableSyntax . Expression ) ? . Parent ;
247+ if ( parentOperation . IsImplicit && parentOperation is IInvocationOperation io &&
248+ io . TargetMethod . MethodKind == MethodKind . ReducedExtension && io . TargetMethod . Name == nameof ( Enumerable . AsEnumerable ) ) {
249+ expression = SyntaxFactory . InvocationExpression ( ValidSyntaxFactory . MemberAccess ( expression , io . TargetMethod . Name ) , SyntaxFactory . ArgumentList ( ) ) ;
250+ }
242251 var fromClauseSyntax = SyntaxFactory . FromClause (
243252 CommonConversions . ConvertIdentifier ( collectionRangeVariableSyntax . Identifier . Identifier ) ,
244- ( CSSyntax . ExpressionSyntax ) await collectionRangeVariableSyntax . Expression . AcceptAsync ( _triviaConvertingVisitor ) ) ;
253+ expression ) ;
245254 return fromClauseSyntax ;
246255 }
247256
0 commit comments