{"record":{"id":"ec63468a4b5652cd","repo":"dotnet/efcore","slug":"named-argument","errorCode":null,"errorMessage":"Named argument","messagePattern":"Named argument","errorType":"exception","errorClass":"NotImplementedException","httpStatus":null,"severity":"error","filePath":"src/EFCore.Design/Query/Internal/CSharpToLinqTranslator.cs","lineNumber":717,"sourceCode":"                destArguments[paramIndex] = Constant(\n                    parameter.DefaultValue is null && parameter.ParameterType.IsValueType\n                        ? Activator.CreateInstance(parameter.ParameterType)\n                        : parameter.DefaultValue,\n                    parameter.ParameterType);\n                continue;\n            }\n\n            var argument = invocation.ArgumentList.Arguments[sourceArgIndex++];\n\n            // Positional argument\n            if (argument.NameColon is null)\n            {\n                destArguments[paramIndex] = Visit(argument, parameter.ParameterType);\n                continue;\n            }\n\n            // Named argument\n            throw new NotImplementedException(\"Named argument\");\n        }\n\n        Check.DebugAssert(destArguments.All(a => a is not null), \"arguments.All(a => a is not null)\");\n\n        return Call(instance, methodInfo, destArguments!);\n\n        IEnumerable<KeyValuePair<string, Type>> GetTypeTypeParameters(INamedTypeSymbol typeSymbol)\n        {\n            // TODO: We match Roslyn type parameters by name, not sure that's right; also for the method's generic type parameters\n\n            if (typeSymbol.ContainingType is { } containingTypeSymbol)\n            {\n                foreach (var kvp in GetTypeTypeParameters(containingTypeSymbol))\n                {\n                    yield return kvp;\n                }\n            }\n","sourceCodeStart":699,"sourceCodeEnd":735,"githubUrl":"https://github.com/dotnet/efcore/blob/dbf9771522148d61a2467854921bd5dc6f6e6916/src/EFCore.Design/Query/Internal/CSharpToLinqTranslator.cs#L699-L735","documentation":"VisitInvocationExpression throws NotImplementedException when a method argument uses named-argument syntax (Foo(bar: 1)). The translator currently only handles positional arguments; named arguments are not mapped onto parameters.","triggerScenarios":"Any method call inside a precompiled query that uses the name: value syntax, e.g. SomeMethod(x: 1, y: 2).","commonSituations":"Using named arguments for readability with EF helpers (e.g. Include, HasFlag) or custom utility methods inside a query.","solutions":["Reorder arguments so they are all positional","Remove the name: prefixes from the call"],"exampleFix":"// before\nvar v = ctx.Blogs.Where(b => b.HasFlag(flag: 4));\n// after\nvar v = ctx.Blogs.Where(b => b.HasFlag(4));","handlingStrategy":"validation","validationCode":"// Detect named arguments in precompiled query source.\nstatic bool UsesNamedArg(string src)\n    => System.Text.RegularExpressions.Regex.IsMatch(src, @\"\\b\\w+\\s*:\\s*\\w\");\nif (UsesNamedArg(querySource)) { /* rewrite to positional args */ }","typeGuard":null,"tryCatchPattern":null,"preventionTips":["Use only positional arguments in precompiled query method calls","Order arguments to match parameter order to avoid the temptation of named args"],"tags":["efcore","precompiled-queries","method-arguments","csharp"],"analyzedSha":"dbf9771522148d61a2467854921bd5dc6f6e6916","analyzedAt":"2026-08-06T20:46:03.226Z","schemaVersion":2},"datasetVersion":"2026-08-07T02:17:10.218Z"}