2010-02-23 2 views
1

Dans notre application, nous avons une petite requête qui ressemble à ceci:Methode appel à deux reprises à l'intérieur de requête LINQ

var selectedAgents = from agent in listAgents 
    where (this.collectionVehicles.GetVehicleByAgent(agent)).IsActive || 
      (this.collectionVehicles.GetVehicleByAgent(agent)).IsSoldSinceCurrentSession 
      select agent; 

Cela fonctionne très bien, mais la méthode GetVehicleByAgent est appelée deux fois et cela est peut-être pas nécessaire.

Avant LINQ, nous avions une foreach-boucle et fait comme ceci:

Vehicle parentVehicle = collectionVehicles.GetVehicleByAgent(agent); 

if (parentVehicle.IsActive || parentVehicle.IsSoldSinceCurrentSession) 
{ 
    selectedAgents.Add(agent); 
} 

Comme vous pouvez le voir GetVehicleByAgent retourne un objet véhicule et qui peut easiely par rapport plus d'une fois. Donc, je cherche un moyen de récupérer le véhicule dans la requête LINQ et le garder. Je ne veux pas appeler GetVehicleByAgent deux fois.

Répondre

5

Vous devez utiliser le let clause, comme ceci:

var selectedAgents = 
    from agent in listAgents 
    let parentVehicle = collectionVehicles.GetVehicleByAgent(agent) 
    where parentVehicle.IsActive || parentVehicle.IsSoldSinceCurrentSession 
    select agent; 
+0

Oui, voilà! Fonctionne parfaitement! – TalkingCode

Questions connexes