Вызов метода дважды внутри LINQ Query - PullRequest
1 голос
/ 23 февраля 2010

В нашем приложении у нас есть маленький запрос, который выглядит так:

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

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

До LINQ у нас был цикл foreach, и мы делали так:

Vehicle parentVehicle = collectionVehicles.GetVehicleByAgent(agent);

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

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

1 Ответ

5 голосов
/ 23 февраля 2010

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

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