InvalidOperationException: последовательность содержит более одного элемента

У меня есть следующий код ниже для программы расчета заработной платы. Первый словарь содержит идентификаторы сотрудников и соответствующие базовые выплаты, хранящиеся в таблице основных данных. Второй словарь содержит идентификаторы сотрудников и соответствующие базовые выплаты, хранящиеся в таблице окладов, которые используются для обработки. Я хочу обновить базовые выплаты заработной платы для каждого идентификатора сотрудника, которые не совпадают в основной таблице. (Изменение заработной платы).

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());
                        }
                    });

Однако я продолжаю получать ошибку 'Sequence contains more than one element'. Как решить эту ошибку?


person Kinyanjui Kamau    schedule 22.02.2013    source источник
comment
Ожидаете ли вы, что сотрудник может иметь несколько кодов? В противном случае SingleOrDefault мог бы показать вам и несоответствие. Затем вы должны исправить ошибку, вызвавшую ее, и остаться с ней SingleOrDefault вместо FirstOrDefault. SingleOrDefault похож на сигнализацию.   -  person Tim Schmelter    schedule 22.02.2013


Ответы (1)


Вы можете использовать FirstOrDefault(), но SingleOrDefault выдает исключение, если существует более одного элемента.

Здесь вы можете точно увидеть, что делает метод single или default: http://msdn.microsoft.com/en-us/library/system.linq.enumerable.singleordefault(v=vs.100).aspx

person Freeman    schedule 22.02.2013