{"record":{"id":"cff23031304cfab1","repo":"dotnet/efcore","slug":"a-fromsqlexpression-has-an-invalid-arguments-expre-cff230","errorCode":null,"errorMessage":"A FromSqlExpression has an invalid arguments expression type '{expressionType}' or value type '{valueType}'.","messagePattern":"A FromSqlExpression has an invalid arguments expression type '(.+?)' or value type '(.+?)'\\.","errorType":"exception","errorClass":"ArgumentOutOfRangeException","httpStatus":null,"severity":"error","filePath":"src/EFCore.Relational/Query/QuerySqlGenerator.cs","lineNumber":510,"sourceCode":"                for (var i = 0; i < constantValues.Length; i++)\n                {\n                    switch (constantValues[i])\n                    {\n                        case RawRelationalParameter rawRelationalParameter:\n                            substitutions[i] = _sqlGenerationHelper.GenerateParameterNamePlaceholder(rawRelationalParameter.InvariantName);\n                            _relationalCommandBuilder.AddParameter(rawRelationalParameter);\n                            break;\n                        case SqlConstantExpression sqlConstantExpression:\n                            substitutions[i] = sqlConstantExpression.TypeMapping!.GenerateSqlLiteral(sqlConstantExpression.Value);\n                            break;\n                    }\n                }\n\n                break;\n            }\n\n            default:\n                throw new ArgumentOutOfRangeException(\n                    nameof(fromSqlExpression),\n                    fromSqlExpression.Arguments,\n                    RelationalStrings.InvalidFromSqlArguments(\n                        fromSqlExpression.Arguments.GetType(),\n                        fromSqlExpression.Arguments is ConstantExpression constantExpression\n                            ? constantExpression.Value?.GetType()\n                            : null));\n        }\n\n        // ReSharper disable once CoVariantArrayConversion\n        // InvariantCulture not needed since substitutions are all strings\n        sql = string.Format(sql, substitutions);\n\n        _relationalCommandBuilder.AppendLines(sql);\n    }\n\n    /// <summary>\n    ///     Generates SQL for a user-provided SQL query.","sourceCodeStart":492,"sourceCodeEnd":528,"githubUrl":"https://github.com/dotnet/efcore/blob/3a2006ef569de08368d59db5e1468aa8f407e4f8/src/EFCore.Relational/Query/QuerySqlGenerator.cs#L492-L528","documentation":"Thrown by QuerySqlGenerator.VisitFromSql when the FromSqlExpression's Arguments property is not a recognized type. The generator expects Arguments to be either a ParameterExpression (representing a parameterized SQL string) or a ConstantExpression containing a string array or object array of parameter values. Any other expression type triggers this ArgumentOutOfRangeException.","triggerScenarios":"Internal pipeline constructs a FromSqlExpression with an Arguments value that is not a string ConstantExpression, a string array ConstantExpression, or a ParameterExpression. This is an internal invariant violation — FromSqlRaw and FromSqlInterpolated always produce valid argument shapes, so this throw indicates either a bug in EF Core or a misuse of the internal FromSqlExpression constructor.","commonSituations":"An EF Core internal bug where FromSqlExpression is constructed with invalid arguments during query compilation. A third-party provider or extension that manually constructs FromSqlExpression instances incorrectly. Very rare; standard FromSqlRaw/FromSqlInterpolated APIs always produce valid argument shapes.","solutions":["Verify your FromSqlRaw/FromSqlInterpolated call uses standard parameter patterns (string SQL + params object[] for raw, FormattableString for interpolated).","If using a third-party provider, report the issue — it may be constructing FromSqlExpression incorrectly.","File a bug at https://github.com/dotnet/efcore with the FromSql query and full stack trace.","As a workaround, switch between FromSqlRaw and FromSqlInterpolated to see if one avoids the issue."],"exampleFix":"// before — ensure standard API usage (this error is typically internal)\nvar blogs = context.Blogs.FromSqlRaw(\"SELECT * FROM Blogs WHERE Id = {0}\", id);\n\n// after — use interpolated form if raw triggers the issue\nvar blogs = context.Blogs.FromSqlInterpolated($\"SELECT * FROM Blogs WHERE Id = {id}\");","handlingStrategy":"try-catch","validationCode":null,"typeGuard":null,"tryCatchPattern":"try\n{\n    var result = await context.Blogs.FromSqlRaw(\"SELECT * FROM Blogs\").ToListAsync();\n}\ncatch (ArgumentOutOfRangeException ex) when (ex.Message.Contains(\"FromSqlExpression has an invalid arguments\"))\n{\n    logger.LogError(ex, \"Invalid FromSql arguments — internal or provider bug\");\n    // Try FromSqlInterpolated as an alternative\n    var result = await context.Blogs.FromSqlInterpolated($\"SELECT * FROM Blogs\").ToListAsync();\n}","preventionTips":["Use standard FromSqlRaw and FromSqlInterpolated APIs — never construct FromSqlExpression manually.","Ensure parameter values are passed as params object[] or via FormattableString, not as expression trees.","Report internal FromSql argument errors to the EF Core team or provider maintainer.","Keep EF Core and provider packages updated to pick up bug fixes."],"tags":["fromsql","sql-generation","internal-error","provider-bug"],"backgroundTag":null,"analyzedSha":"3a2006ef569de08368d59db5e1468aa8f407e4f8","analyzedAt":"2026-08-11T23:42:04.146Z","contentChangedAt":null,"schemaVersion":2},"datasetVersion":"2026-09-14T00:17:10.932Z"}