Methode在LINQ Query中调用两次

Tal*_*ode 1 linq linq-to-objects

在我们的应用程序中,我们有一个看起来像这样的小查询:

var selectedAgents = from agent in listAgents
    where (this.collectionVehicles.GetVehicleByAgent(agent)).IsActive || 
          (this.collectionVehicles.GetVehicleByAgent(agent)).IsSoldSinceCurrentSession 
           select agent;
Run Code Online (Sandbox Code Playgroud)

这工作正常,但方法GetVehicleByAgent被调用两次,这可能是没有必要的.

在LINQ之前,我们有一个foreach循环,并且这样做:

Vehicle parentVehicle = collectionVehicles.GetVehicleByAgent(agent);

if (parentVehicle.IsActive || parentVehicle.IsSoldSinceCurrentSession)
{
    selectedAgents.Add(agent);
}
Run Code Online (Sandbox Code Playgroud)

正如您所看到的,GetVehicleByAgent返回一个Vehicle对象,并且可以轻松地进行多次比较.所以我正在寻找一种方法来解决LINQ查询中的车辆并保留它.我不想两次调用GetVehicleByAgent.

SLa*_*aks 5

您需要使用该let子句,如下所示:

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