2010-02-23 2 views
1

В нашем приложении мы немного запрос, который выглядит следующим образом:Methode вызова дважды в LINQ Query

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

Это прекрасно работает, но метод GetVehicleByAgent называется два раза, и это, возможно, не нужно.

Перед LINQ мы имели Еогеасп петлю и сделал так:

Vehicle parentVehicle = collectionVehicles.GetVehicleByAgent(agent); 

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

Как вы можете видеть GetVehicleByAgent возвращает объект Vehicle и может easiely по сравнению более чем один раз. Поэтому я ищу способ вернуть автомобиль внутри запроса LINQ и сохранить его. Я не хочу дважды звонить GetVehicleByAgent.

ответ

5

Вы должны использовать let clause, например:

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

Да, это так! Прекрасно работает! – TalkingCode

Смежные вопросы