0

J'ai une très petite structure d'infrastructure contenant seulement quelques classes/tables et une vue. Je dois être en mesure de tirer un enregistrement spécifique de ce point de vue, à savoir, je dois être en mesure de saisir le dossier qui répond à deux critères, il a un ProfileID et QuoteID spécifique spécifique.Entity Framework Views et Linq .Where

Cette ligne est ce qui cause le problème:

TWProfileUpchargeTotal upchargeTotals = _context.TWProfileUpchargeTotals.Where(p => p.Profileid == profile.id && p.quoteid == _quote.quoteid).First(); 

Je boucle à travers les profils que je connais et d'obtenir leurs informations de la vue, les changements afin profile.id chaque fois.

La première fois que ce code s'exécute, il obtient l'enregistrement correct de la vue. La seconde et la troisième (et vraisemblablement au-delà de cette durée) s'exécutent, elle récupère exactement le même enregistrement.

Une idée pourquoi ou ce que je fais mal ici?

Merci d'avance.

Répondre

3

Vous avez été mordu par le «gotcha» de LINQ appelé fermeture. Le poste suivant (et bien d'autres) sur les détails SO ceci: closure

Ce que vous devez faire est de déclarer une variable dans le foreach que vous avez ommited du code ci-dessus et attribuer le profile.id à cela et utiliser dans la clause Where.

foreach(Profile profile in ListOfProfiles) 
{ 
    var localProfile = profile; 
    TWProfileUpchargeTotal upchargeTotals = _context.TWProfileUpchargeTotals.Where(p => p.Profileid == localProfile.id && p.quoteid == _quote.quoteid).First(); 
} 
+0

Merci! C'est un concept intéressant que je vais certainement devoir lire. Quelque chose de nouveau tous les jours, tu sais. –