You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C#中如何用单条LINQ查询优先获取最轻轿车,无轿车则取最轻SUV

单条LINQ实现优先获取最轻Car/SUV的方案

嘿,这个需求完全可以用一条简洁的LINQ查询搞定,而且比两段查询更高效(只需要遍历一次集合)!

核心思路是给车辆类型设置优先级排序,让Car的优先级高于SUV,再结合重量排序,最后取第一个结果就符合你的需求了。

具体实现代码

假设你的Vehicle类里Type是枚举类型(比如VehicleType.CAR和VehicleType.SUV),可以这么写:

Vehicle lightestVehicle = listVehicles
    // 第一步:给Car设置更高优先级(排序值越小越靠前)
    .OrderBy(v => v.Type == VehicleType.CAR ? 0 : 1)
    // 第二步:同一类型内按重量升序排列
    .ThenBy(v => v.Weight)
    // 取第一个结果,没有符合条件的则返回null
    .FirstOrDefault();

如果你的数组里可能存在其他类型的车辆,还可以先过滤掉非目标类型:

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

逻辑解释

  1. OrderBy(v => v.Type == VehicleType.CAR ? 0 : 1):所有Car会被分配排序值0,SUV是1,所以Car整体排在SUV前面,保证优先考虑轿车。
  2. ThenBy(v => v.Weight):在同一类型内部,按重量从小到大排序,确保取到该类型里最轻的车辆。
  3. FirstOrDefault():取排序后的第一个元素,也就是优先级最高(Car)里最轻的;如果没有Car,就取SUV里最轻的;如果连SUV都没有,返回null,和你原来两段查询的逻辑完全一致。

这种方式相比原来的两段LINQ查询,不仅代码更简洁,还避免了两次遍历集合的性能开销,逻辑也更直观。

内容的提问来源于stack exchange,提问作者videoguy

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.21 06:43:43