从LINQ搜索结果

时间:2018-03-29 02:46:48

标签: c# .net 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;

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

3 个答案:

答案 0 :(得分: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();

答案 1 :(得分:1)

你觉得这种方法更好吗?

var lightestVehicle = listVehicles.OrderBy(x => x.Type).ThenBy(n => n.weight).Select(x => x).FirstOrDefault();

答案 2 :(得分:0)

试试这个:

        var lighttestvehicle =
            (from v in vehicles
             orderby v.Weight, v.Type ascending
             select v)
             .FirstOrDefault();