从LINQ搜索结果中选择组的第一个元素

vid*_*guy 5 .net c# linq

我在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;
Run Code Online (Sandbox Code Playgroud)

有没有更好的方法来使用groupby或其他LINQ技巧完成相同的操作?

das*_*ght 3

您可以按类型订购,将轿车放在 SUV 之前,然后按重量订购。如果有汽车,您可以选择最轻的汽车;如果没有汽车,您可以选择最轻的 SUV:

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