{"record":{"id":"752d7d9647f20a5a","repo":"dotnet/machinelearning","slug":"must-provide-at-least-1-value-column-when-specifyi","errorCode":null,"errorMessage":"Must provide at least 1 value column when specifying value columns manually","messagePattern":"Must provide at least 1 value column when specifying value columns manually","errorType":"validation","errorClass":"ArgumentException","httpStatus":null,"severity":"error","filePath":"src/Microsoft.Data.Analysis/DataFrame.cs","lineNumber":778,"sourceCode":"            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)\n            {\n                throw new ArgumentException(string.Format(Strings.VariableNameAlreadyExists, variableName), nameof(variableName));\n            }\n\n            if (_columnCollection.IndexOf(valueName) >= 0)","sourceCodeStart":760,"sourceCodeEnd":796,"githubUrl":"https://github.com/dotnet/machinelearning/blob/7b76e69cf964daeca3f1377af6bc5543284d56c6/src/Microsoft.Data.Analysis/DataFrame.cs#L760-L796","documentation":"Thrown by DataFrame.Melt when valueColumns is explicitly supplied but resolves to an empty list — i.e. the user opted into specifying value columns manually yet provided none that exist. Raised as ArgumentException (Strings.MissingValueColumns) with paramName 'valueColumns'.","triggerScenarios":"Calling df.Melt(ids, Enumerable.Empty<string>()) or df.Melt(ids, new string[0]); also when all provided value column names fail to match DataFrame columns so valueColumnList is empty.","commonSituations":"User selections that ended up empty in a UI-driven export; typo'd column names filtered out of the list; refactoring removing value columns without updating the call.","solutions":["Provide at least one existing column name in valueColumns","Omit valueColumns (pass null) to melt all non-ID columns automatically","Validate the provided names exist in DataFrame.Columns before calling"],"exampleFix":"// before\ndf.Melt(ids, new string[0]);\n// after\ndf.Melt(ids, new[] { \"Sales\", \"Cost\" }); // or pass null to use all remaining columns","handlingStrategy":"validation","validationCode":"if (valueColumns != null && !valueColumns.Any()) valueColumns = null; // fall back to all non-ID columns","typeGuard":null,"tryCatchPattern":"try { df.Melt(ids, valueColumns); }\ncatch (ArgumentException ex) when (ex.ParamName == \"valueColumns\") { /* retry with null to melt all remaining */ }","preventionTips":["Prefer passing null for valueColumns to melt all non-ID columns","Check selections are non-empty before converting them to arguments","Validate provided names exist in DataFrame.Columns"],"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"}