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

5

我有一个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个回答

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

你觉得这种方法更好吗?

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

0

试试这个:

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

你的答案不正确。如果有一辆比其他任何车都要轻的SUV,那么它将被你的查询返回。 你应该先按类型排序,然后按重量排序: orderby v.Type, v.Weight - Dmitry Stepanov

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接