在我们的应用程序中,我们有一个看起来像这样的小查询:
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。
答案 0 :(得分:5)
您需要使用let
clause,如下所示:
var selectedAgents =
from agent in listAgents
let parentVehicle = collectionVehicles.GetVehicleByAgent(agent)
where parentVehicle.IsActive || parentVehicle.IsSoldSinceCurrentSession
select agent;