我在C#中有一系列车辆,有些车辆是汽车,而其他车辆是SUV。我想知道什么是最好的方法来获得重量最轻的汽车。如果在阵列中未找到汽车,则找到重量最轻的SUV。
下面是我使用LINQ的代码段。我想知道是否有更好的方法来使用一个查询而不是两个查询来获取此信息。

Vehicle listVehicles[] = ...
Vehicle lightestVehicle = (from aVehicle in listVehicles
                      where aVehicle.Type == CAR
                      orderby aVehicle.Weight ascending)?.FirstOrDefault();
if (null == lightestVehicle)
    lightestVehicle = (from aVehicle in listVehicles
                      where aVehicle.Type == SUV
                      orderby aVehicle.Weight ascending)?.FirstOrDefault();
return lightestVehicle;

有没有更好的方法可以使用groupby或其他LINQ技巧来实现相同目的?

最佳答案

您可以订购类型,将汽车放在SUV之前,然后按重量订购。这使您可以在有车的情况下选择最轻的汽车,在无车的情况下选择最轻的SUV:

return listVehicles
    .Where(v => v.Type == CAR || v.Type == SUV)
    .OrderBy(v => v.Type == CAR ? 0 : 1)
    .ThenBy(v => v.Weight)
    .FirstOrDefault();

09-26 12:49