使用LINQ使用现有数组排序列表

时间:2010-09-09 10:07:24

标签: c# linq .net-3.5

class Car{
     int ID {get;set;}
     string Text {get;set;}
}

List<Car> allCars = new List<Car>(){ new Car{ ID = 1, Text = "one"}, new Car{ ID = 2, Text = "two"}, new Car{ ID = 3, Text = "three"}, new Car{ ID = 4, Text = "four"} };
int[] existingCarIds = new int[]{ 2, 4 };

我想有这个清单。

CarWithID2
CarWithID4
CarWithID1
CarWithID3

所以我做了:

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

还有其他方法可以进行相同的查询吗?

由于

洛伦佐。

2 个答案:

答案 0 :(得分:9)

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

如果您需要以与数组完全相同的顺序对列表进行排序,请使用

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
    });

此查询按existingCars数组中的索引排序,其中元素在数组中没有匹配的id。

答案 1 :(得分:2)

您可以使用OrderBy

List carList = allCars.OrderBy(d => !existingCarIds.Contains(d.ID)).ToList();