C# 使用LINQ对使用现有数组的列表进行排序

C# 使用LINQ对使用现有数组的列表进行排序,c#,linq,.net-3.5,C#,Linq,.net 3.5,所以我做了: CarWithID2 CarWithID4 CarWithID1 CarWithID3 List carList=allCars.Where(d=>existingCarIds.Contains(d.ID)).Concat(allCars.Where(d=>!existingCarIds.Contains(d.ID)).ToList(); 有没有其他方法可以执行相同的查询 谢谢 Lorenzo.您可以使用OrderBy: List<Car> carList = al

所以我做了:

CarWithID2
CarWithID4
CarWithID1
CarWithID3
List carList=allCars.Where(d=>existingCarIds.Contains(d.ID)).Concat(allCars.Where(d=>!existingCarIds.Contains(d.ID)).ToList();
有没有其他方法可以执行相同的查询

谢谢


Lorenzo.

您可以使用
OrderBy

List<Car> carList = allCars.Where(d => existingCarIds.Contains(d.ID)).Concat(allCars.Where(d => !existingCarIds.Contains(d.ID))).ToList();

使用OrderBy——至少,它会更好地显示正在发生的事情:重新排序

如果需要按照与数组完全相同的顺序排列列表,请使用

List carList = allCars.OrderBy(d => !existingCarIds.Contains(d.ID)).ToList();
var reordered=allCars.OrderBy(car=>
{
var index=Array.IndexOf(existingCars,car.ID);
回报指数
List carList = allCars.OrderBy(d => !existingCarIds.Contains(d.ID)).ToList();
var reordered = allCars.OrderBy(car=>
    {
        var index = Array.IndexOf(existingCars, car.ID);
        return index<0 ? int.MaxValue : index; // put elements that don't have matching ID in the end
    });