{"record":{"id":"162132e096da7d9d","repo":"dotnet/efcore","slug":"async-lambdas-are-not-supported","errorCode":null,"errorMessage":"Async lambdas are not supported","messagePattern":"Async lambdas are not supported","errorType":"exception","errorClass":"NotSupportedException","httpStatus":null,"severity":"error","filePath":"src/EFCore.Design/Query/Internal/CSharpToLinqTranslator.cs","lineNumber":1042,"sourceCode":"    /// </summary>\n    public override Expression DefaultVisit(SyntaxNode node)\n        => throw new NotSupportedException($\"Unsupported syntax node of type '{node.GetType()}': {node}\");\n\n    private Expression VisitLambdaExpression(AnonymousFunctionExpressionSyntax lambda, Type? expectedType = null)\n    {\n        if (lambda.ExpressionBody is null)\n        {\n            throw new NotSupportedException(\"Lambda with null expression body\");\n        }\n\n        if (lambda.Modifiers.Any())\n        {\n            throw new NotSupportedException(\"Lambda with modifiers not supported: \" + lambda.Modifiers);\n        }\n\n        if (!lambda.AsyncKeyword.IsKind(SyntaxKind.None))\n        {\n            throw new NotSupportedException(\"Async lambdas are not supported\");\n        }\n\n        var lambdaParameters = lambda switch\n        {\n            SimpleLambdaExpressionSyntax simpleLambda => SyntaxFactory.SingletonSeparatedList(simpleLambda.Parameter),\n            ParenthesizedLambdaExpressionSyntax parenthesizedLambda => parenthesizedLambda.ParameterList.Parameters,\n\n            _ => throw new UnreachableException()\n        };\n\n        var translatedParameters = new List<ParameterExpression>();\n        foreach (var parameter in lambdaParameters)\n        {\n            if (_semanticModel.GetDeclaredSymbol(parameter) is not { } parameterSymbol\n                || ResolveType(parameterSymbol.Type) is not { } parameterType)\n            {\n                throw new InvalidOperationException(\"Could not found symbol for parameter lambda: \" + parameter);\n            }","sourceCodeStart":1024,"sourceCodeEnd":1060,"githubUrl":"https://github.com/dotnet/efcore/blob/dbf9771522148d61a2467854921bd5dc6f6e6916/src/EFCore.Design/Query/Internal/CSharpToLinqTranslator.cs#L1024-L1060","documentation":"Thrown by VisitLambdaExpression when the lambda's AsyncKeyword is present (lambda.AsyncKeyword is not SyntaxKind.None). The translator cannot represent async semantics in a synchronous LINQ expression tree, so async lambdas are rejected outright. Part of EF Core's precompiled-query C#-to-LINQ translation.","triggerScenarios":"Translating precompiled query source containing an async lambda (async x => await ...).","commonSituations":"Mixing IQueryable sync extensions with async/await patterns inside a lambda; precompiling a query originally written with async lambda patterns.","solutions":["Remove the 'async' keyword and any 'await' from the lambda; precompiled queries translate the expression tree synchronously.","Use synchronous EF query APIs for the translated query path."],"exampleFix":"// before\n.Where(async x => await SomeCheckAsync(x))\n// after\n// move async logic out of the translatable predicate; keep the lambda synchronous","handlingStrategy":"validation","validationCode":"foreach (var lambda in root.DescendantNodes().OfType<AnonymousFunctionExpressionSyntax>())\n{\n    if (!lambda.AsyncKeyword.IsKind(SyntaxKind.None))\n        throw new InvalidOperationException(\n            $\"Async lambda at {lambda.GetLocation()} cannot be translated; remove 'async'.\");\n}","typeGuard":null,"tryCatchPattern":null,"preventionTips":["Keep predicates and selectors synchronous inside IQueryable LINQ chains.","Run async orchestration outside the translatable query expression."],"tags":["efcore","lambda","async","expression-trees","translator"],"analyzedSha":"dbf9771522148d61a2467854921bd5dc6f6e6916","analyzedAt":"2026-08-06T20:46:03.226Z","schemaVersion":2},"datasetVersion":"2026-08-07T03:17:09.362Z"}