在LINQ中,执行IOrderedEnumerable <T>的预测是否保留顺序?

Nei*_*ick 6 .net c# linq

如果我有IOrderedEnumberable<Car>,我会对它进行排序然后进行投影查询...

投影中保留的顺序是什么?

例如,这种情况有效吗?

IOrderedEnumberable<Car> allCarsOrderedFastestToSlowest = 
            GetAllCars()
                  .OrderByDescending(car=>car.TopSpeed);

var top3FastestCarManufacturers =
            allCarsOrderedFastestToSlowest
                  .Select(car=>car.Manufacturer)
                  .Distinct()
                  .Take(3);
Run Code Online (Sandbox Code Playgroud)

top3FastestCarManufacturers变量的名称是否表达了代码中实际发生的含义?

Guf*_*ffa 3

该方法的文档Distinct没有说明是否保留订单。这可能是因为它取决于源的底层实现。

您可以使用分组来获得所需的结果,方法是从每个制造商中获取最快的汽车,然后从中获取三辆最快的汽车:

var topThreeFastestCarManufacturers =
  GetAllCars()
  .GroupBy(c => c.Manufacturer)
  .Select(g => g.OrderByDescending(c => c.TopSpeed).First())
  .OrderByDescending(c => c.TopSpeed)
  .Take(3);
Run Code Online (Sandbox Code Playgroud)