InvalidOperationException: Sequence contains more than one element

c#, visual-studio-2010

Solution

You can use FirstOrDefault() but SingleOrDefault throws an exception if more than one element exists.

Here you can see exactly what the single or default method does: http://msdn.microsoft.com/en-us/library/system.linq.enumerable.singleordefault(v=vs.100).aspx

Problem

I have the following code below for a payroll program. The first dictionary holds the employee IDs and corresponding basic pays held in a master data table. The second dictionary holds the employee IDs and corresponding basic pays held in a salary fitment table - used for processing. I want to update the salary fitment basic pays for each employee ID that do not match in the master table. (Changes in salary). ``` var OHEMDictionary = employees.OrderBy(es => es.empID) .ToDictionary(od => od.empID, od => od.salary); var SalaryFitmentDictionary = salaryFitments .Where(x => x.U_PD_Code.Trim().ToString() == "SYS001") .OrderBy(es => es.U_Employee_ID) .ToDictionary(od => od.U_Employee_ID, od => od.U_PD_Amount); var difference = OHEMDictionary .Where(kv => SalaryFitmentDictionary[kv.Key] != kv.Value); difference.ToList().ForEach(x => { decimal salary = x.Value.Value; var codeToUpdate = salaryFitments .Where(y => y.U_Employee_ID.Equals(x.Key)) .Select(z => z.Code) .SingleOrDefault(); `**<---exception thrown here**` var salaryFitment = salaryFitmentService .GetSalaryFitment(codeToUpdate); if (salaryFitment != null) { // Save record salaryFitmentService .UpdateSalaryFitment(salaryFitment, salary.ToString()); } }); ``` However, I keep getting the error `'Sequence contains more than one element'`. How do I solve this error?

Original source