{"record":{"id":"58342087ffd1363c","repo":"dotnet/machinelearning","slug":"must-provide-at-least-1-id-column","errorCode":null,"errorMessage":"Must provide at least 1 ID column","messagePattern":"Must provide at least 1 ID column","errorType":"validation","errorClass":"ArgumentException","httpStatus":null,"severity":"error","filePath":"src/Microsoft.Data.Analysis/DataFrame.cs","lineNumber":773,"sourceCode":"\n            var idColumnList = idColumns.ToList();\n\n            HashSet<string> idColumnSet = null;\n\n            if (valueColumns is null)\n            {\n                idColumnSet = [.. idColumnList];\n            }\n\n            var valueColumnList = valueColumns?.ToList()\n                ?? _columnCollection\n                    .Where(c => !idColumnSet.Contains(c.Name))\n                    .Select(c => c.Name)\n                    .ToList();\n\n            if (idColumnList.Count == 0)\n            {\n                throw new ArgumentException(Strings.MissingIdColumns, nameof(idColumns));\n            }\n\n            if (valueColumns != null && valueColumnList.Count == 0)\n            {\n                throw new ArgumentException(Strings.MissingValueColumns, nameof(valueColumns));\n            }\n\n            if (valueColumns != null && valueColumnList.Any(v => idColumnList.Contains(v)))\n            {\n                throw new ArgumentException(Strings.DuplicateColumnsInIdAndValueLists, nameof(valueColumns));\n            }\n\n            if (valueColumns == null && valueColumnList.Count == 0)\n            {\n                throw new InvalidOperationException(Strings.NoValueColumnsRemaining);\n            }\n\n            if (_columnCollection.IndexOf(variableName) >= 0)","sourceCodeStart":755,"sourceCodeEnd":791,"githubUrl":"https://github.com/dotnet/machinelearning/blob/7b76e69cf964daeca3f1377af6bc5543284d56c6/src/Microsoft.Data.Analysis/DataFrame.cs#L755-L791","documentation":"Thrown by DataFrame.Melt when the idColumns argument yields an empty list, i.e. no ID columns were supplied (or none matched after processing). Melt needs at least one identifier column to preserve row identity in the long-format output. Raised as ArgumentException (Strings.MissingIdColumns) with paramName 'idColumns'.","triggerScenarios":"Calling df.Melt(Enumerable.Empty<string>(), values) or passing a collection whose names do not exist in the DataFrame so the filtered idColumnList ends up empty.","commonSituations":"Empty config arrays; building the ID list dynamically from user selections where nothing was selected; misspelled column names filtered out before the count check.","solutions":["Pass at least one valid ID column name that exists in the DataFrame","Validate the selected ID columns are non-empty before calling Melt","Ensure the names match DataFrame column names exactly (casing included)"],"exampleFix":"// before\ndf.Melt(new string[0], values);\n// after\ndf.Melt(new[] { \"Id\" }, values);","handlingStrategy":"validation","validationCode":"if (idColumnList.Count == 0) throw new InvalidOperationException(\"Select at least one ID column before melting\");","typeGuard":null,"tryCatchPattern":"try { df.Melt(idColumns, valueColumns); }\ncatch (ArgumentException ex) when (ex.ParamName == \"idColumns\") { /* prompt for ID columns */ }","preventionTips":["Require at least one ID selection in UIs/pipelines","Validate names against DataFrame.Columns before calling","Keep ID lists non-empty by construction"],"tags":["dotnet","dataframe","melt","empty-collection"],"backgroundTag":"missing-required-argument","analyzedSha":"7b76e69cf964daeca3f1377af6bc5543284d56c6","analyzedAt":"2026-09-11T12:35:38.930Z","contentChangedAt":"2026-09-11T12:35:38.930Z","schemaVersion":2},"datasetVersion":"2026-09-14T05:17:10.506Z"}