C# 将if-else转换为linq
我在c#中有以下代码,我在其中搜索最低价航班。现在我想将其转换为LinqC# 将if-else转换为linq,c#,linq,C#,Linq,我在c#中有以下代码,我在其中搜索最低价航班。现在我想将其转换为Linq for (; count < _flightSearchController.ListOfContracts.Count; count++) { contract = (DTContract)_flightSearchController.ListOfContracts[count]; if (contract.CurrentSt
for (; count < _flightSearchController.ListOfContracts.Count; count++)
{
contract = (DTContract)_flightSearchController.ListOfContracts[count];
if (contract.CurrentStatus == AvailabilityStatus.AVAILABLE)
{
if (CheckContractCitiesWithSearchCriteria(contract, originAirports, destinationAirports))
{
//if fare is lower than selected contract.
if (lowestPriceContract == null || lowestPriceContract.FareDetails.PriceForDefaultFlightSelection > contract.FareDetails.PriceForDefaultFlightSelection)
{
lowestPriceContract = contract;
}
else if (lowestPriceContract.FareDetails.PriceForDefaultFlightSelection == contract.FareDetails.PriceForDefaultFlightSelection)
{
if (lowestPriceContract.FareDetails.PriceAdult > 0 && (lowestPriceContract.FareDetails.PriceAdult + lowestPriceContract.FareDetails.FareTaxAdult) > (contract.FareDetails.PriceAdult + contract.FareDetails.FareTaxAdult))
{
lowestPriceContract = contract;
}
else if (lowestPriceContract.FareDetails.PriceSenior > 0 && (lowestPriceContract.FareDetails.PriceSenior + lowestPriceContract.FareDetails.FareTaxSenior) > (contract.FareDetails.PriceSenior + contract.FareDetails.FareTaxSenior))
{
lowestPriceContract = contract;
}
}
}
(;count<\u flightSearchController.ListOfContracts.count;count++)的
{
contract=(DTContract)\u flightSearchController.ListOfContracts[count];
if(contract.CurrentStatus==AvailabilityStatus.AVAILABLE)
{
if(使用搜索标准检查合同城市(合同、原始机场、目的地机场))
{
//如果票价低于所选合同。
如果(LowestPriceContact==null | | LowestPriceContact.FareDetails.PriceForDefaultFlightSelection>contract.FareDetails.PriceForDefaultFlightSelection)
{
最低价格合同=合同;
}
else if(LowestPriceContact.FareDetails.PriceForDefaultFlightSelection==contract.FareDetails.PriceForDefaultFlightSelection)
{
如果(LowestPriceContact.FareDetails.Price成人>0&(LowestPriceContact.FareDetails.Price成人+LowestPriceContact.FareDetails.FareTax成人)>(contract.FareDetails.Price成人+contract.FareDetails.FareTax成人))
{
最低价格合同=合同;
}
否则如果(LowestPriceContact.FareDetails.PriceSenior>0&(LowestPriceContact.FareDetails.PriceSenior+LowestPriceContact.FareDetails.FareTaxSenior)>(contract.FareDetails.PriceSenior+contract.FareDetails.FareTaxSenior))
{
最低价格合同=合同;
}
}
}
}
我试图转换它,但在if-else-if部分卡住了
var q = _flightSearchController.ListOfContracts.ToList<DTContract>()
.Where(cont => cont.CurrentStatus == AvailabilityStatus.AVAILABLE);
if (lowestPriceContract == null || lowestPriceContract.FareDetails.PriceForDefaultFlightSelection > contract.FareDetails.PriceForDefaultFlightSelection)
{
}
var q=\u flightSearchController.ListOfContracts.ToList()
.Where(cont=>cont.CurrentStatus==AvailabilityStatus.AVAILABLE);
如果(LowestPriceContact==null | | LowestPriceContact.FareDetails.PriceForDefaultFlightSelection>contract.FareDetails.PriceForDefaultFlightSelection)
{
}
使用Min
扩展方法:
var q = _flightSearchController.ListOfContracts
.Where(cont => cont.CurrentStatus == AvailabilityStatus.AVAILABLE
&& CheckContractCitiesWithSearchCriteria(cont, originAirports, destinationAirports))
.Min(cont=> cont.FareDetails.PriceForDefaultFlightSelection)
编辑我忽略了平局破坏部分,这使它变得更复杂。你可以通过排序来完成,但当有很多合同时,这会更慢:
var q = _flightSearchController.ListOfContracts
.Where(cont => cont.CurrentStatus == AvailabilityStatus.AVAILABLE)
&& CheckContractCitiesWithSearchCriteria(cont, originAirports, destinationAirports))
.OrderBy(cont => FareDetails.PriceForDefaultFlightSelection)
.ThenBy(cont => cont.FareDetails.PriceAdult + lowestPriceContract.FareDetails.FareTaxAdult)
.ThenBy(cont => cont.FareDetails.PriceSenior + lowestPriceContract.FareDetails.FareTaxSenior)
.First();
您可以为FareDetails
对象实现IComparable
接口来比较价格,这将允许您执行以下操作:
var q = _flightSearchController.ListOfContracts
.Where(cont => cont.CurrentStatus == AvailabilityStatus.AVAILABLE
&& CheckContractCitiesWithSearchCriteria(cont, originAirports, destinationAirports))
.Min(cont=> cont.FareDetails)
如果我没有写,您将跳过带有搜索条件的检查合同城市,或者如果block
if(a)…else if(b)…else if(c).
将创建以下情况:a
,不是a和b
,不是a,也不是b和c
。哪里是硬的部分??