2010-09-09 26 views
2
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 }; 

我想要這個列表。使用LINQ使用現有陣列排列列表

CarWithID2 
CarWithID4 
CarWithID1 
CarWithID3 

所以我做:

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

是否有任何其他的方式做同樣的查詢?

謝謝

洛倫佐。

回答

2

您可以使用OrderBy

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

使用OrderBy - 起碼,它會更好地展示正在發生的事情:重新排序。

如果您需要訂購完全相同的順序排列的列表中,由指數existingCars陣列使用

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

這個查詢訂單,與具有數組中沒有匹配的ID最後去的元素。