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();
还有其他方法可以进行相同的查询吗?
由于
洛伦佐。
答案 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();