InvalidOperationException: Séquence contient plus d'un élément
J'ai le code suivant ci-dessous pour un programme d'épargne-salaire.
Le premier dictionnaire détient l'Id d'employés et de base correspondant paie, tenue dans une table de données de base.
Le dictionnaire second détient l'Id d'employés et de base correspondant paie tenue à un salaire de montage de la table utilisée pour le traitement.
Je veux mettre à jour le salaire de l'équipement de base de la paie pour chaque ID de l'employé qui n'ont pas de correspondance dans la table maître. (Les changements de salaire).
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());
}
});
Cependant, je reçois l'erreur 'Sequence contains more than one element'
. Comment puis-je résoudre cette erreur?
Pensez-vous qu'un Employé peut avoir plusieurs Codes? Si non,
SingleOrDefault
pourrait vous ai montré et d'incohérence. Ensuite, vous devez corriger un bug qui a causé cela et rester avec elle SingleOrDefault
au lieu de FirstOrDefault
. SingleOrDefault
est comme un système d'alarme.OriginalL'auteur Kinyanjui Kamau | 2013-02-22
Vous devez vous connecter pour publier un commentaire.
Vous pouvez utiliser FirstOrDefault() mais SingleOrDefault déclenche une exception si plus d'un élément existe.
Ici, vous pouvez voir exactement ce que l'unique ou la méthode par défaut:
http://msdn.microsoft.com/en-us/library/system.linq.enumerable.singleordefault(v=vs. 100).aspx
Vous êtes les bienvenus 🙂
OriginalL'auteur Freeman