{"record":{"id":"ea4837b45808fabd","repo":"dotnet/efcore","slug":"unknown-generic-type-parameter-symbol-typeparamet","errorCode":null,"errorMessage":"Unknown generic type parameter symbol {typeParameterSymbol}","messagePattern":"Unknown generic type parameter symbol (.+?)","errorType":"exception","errorClass":"InvalidOperationException","httpStatus":null,"severity":"error","filePath":"src/EFCore.Design/Query/Internal/CSharpToLinqTranslator.cs","lineNumber":1160,"sourceCode":"\n                // TODO: Cache closed anonymous types\n\n                return anonymousTypeGenericDefinition.MakeGenericType(genericTypeArguments);\n\n            case INamedTypeSymbol { IsDefinition: true } genericTypeSymbol:\n                return GetClrType(genericTypeSymbol);\n\n            case INamedTypeSymbol { IsGenericType: true } genericTypeSymbol:\n            {\n                var definition = GetClrType(genericTypeSymbol.OriginalDefinition);\n                var typeArguments = genericTypeSymbol.TypeArguments.Select(a => ResolveType(a, genericParameterMap)).ToArray();\n                return definition.MakeGenericType(typeArguments);\n            }\n\n            case ITypeParameterSymbol typeParameterSymbol:\n                return genericParameterMap?.TryGetValue(typeParameterSymbol.Name, out var type) == true\n                    ? type\n                    : throw new InvalidOperationException($\"Unknown generic type parameter symbol {typeParameterSymbol}\");\n\n            case INamedTypeSymbol namedTypeSymbol:\n                return GetClrType(namedTypeSymbol);\n\n            case IArrayTypeSymbol arrayTypeSymbol:\n                // The ContainingAssembly of array type symbols can be null; recurse down the element types (down to the non-array element\n                // type) to get the assembly.\n                var containingAssembly = arrayTypeSymbol.ContainingAssembly;\n                ITypeSymbol currentSymbol = arrayTypeSymbol;\n                while (containingAssembly is null && currentSymbol is IArrayTypeSymbol { ElementType: var nestedTypeSymbol })\n                {\n                    currentSymbol = nestedTypeSymbol;\n                    containingAssembly = currentSymbol.ContainingAssembly;\n                }\n\n                return GetClrTypeFromAssembly(\n                    containingAssembly,\n                    typeSymbol.ToDisplayString(QualifiedTypeNameSymbolDisplayFormat));","sourceCodeStart":1142,"sourceCodeEnd":1178,"githubUrl":"https://github.com/dotnet/efcore/blob/dbf9771522148d61a2467854921bd5dc6f6e6916/src/EFCore.Design/Query/Internal/CSharpToLinqTranslator.cs#L1142-L1178","documentation":"Thrown by ResolveType when an ITypeParameterSymbol's name is not found in the genericParameterMap. The translator hit an open generic type parameter but no mapping from parameter name to a concrete Type was supplied. Primarily an internal-API misuse rather than an end-user error. Part of EF Core's precompiled-query C#-to-LINQ translation.","triggerScenarios":"Translating an expression involving a generic method/type where the generic type argument was not bound to a concrete type in the genericParameterMap passed to ResolveType.","commonSituations":"Calling TranslateType/ResolveType directly with an open generic type symbol without supplying a genericParameterMap; generic type arguments not being closed before translation.","solutions":["Pass a genericParameterMap mapping the generic parameter name to a concrete Type when calling ResolveType.","Substitute concrete type arguments before invoking the translator."],"exampleFix":"// before (internal call with open generic)\ntranslator.TranslateType(openGenericParamSymbol)\n// after\n// close the generic first, or supply a mapping","handlingStrategy":"validation","validationCode":"// When calling ResolveType/TranslateType, guard against open generic parameters\nif (typeSymbol is ITypeParameterSymbol tps && (genericParameterMap is null || !genericParameterMap.ContainsKey(tps.Name)))\n    throw new InvalidOperationException(\n        $\"Open generic parameter '{tps.Name}' has no concrete mapping; supply a genericParameterMap.\");","typeGuard":null,"tryCatchPattern":null,"preventionTips":["Always close generic types before passing them to the translator.","When extending the translator, thread the genericParameterMap through recursive ResolveType calls."],"tags":["efcore","generics","type-resolution","translator","internal-api"],"analyzedSha":"dbf9771522148d61a2467854921bd5dc6f6e6916","analyzedAt":"2026-08-06T20:46:03.226Z","schemaVersion":2},"datasetVersion":"2026-08-07T02:17:10.218Z"}