C# 将if-else转换为linq

C# 将if-else转换为linq,c#,linq,C#,Linq,我在c#中有以下代码,我在其中搜索最低价航班。现在我想将其转换为Linq for (; count < _flightSearchController.ListOfContracts.Count; count++) { contract = (DTContract)_flightSearchController.ListOfContracts[count]; if (contract.CurrentSt

我在c#中有以下代码,我在其中搜索最低价航班。现在我想将其转换为Linq

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
。哪里是硬的部分??