2012-11-27 32 views
0

的名单我想ORDERBY像一个列表:自定义排序依据上表

public List<Person> personList { get; set; };  

class Person 
{ 
    public string Name{ get; set; }; 
    public List<Car> carList{ get; set; }; 
} 

class Car 
{ 
    public string Name { get; set; }; 
    public int PriceInMillions { get; set; }; 
} 

我要排序的每个PersonList这样CarListCarList具有BMW object(can be one or more)在列表顶部?

输入:

Person: Name: 'ABC' 
List<Car>:{{"x",25},{"y",25},{"BMW",26},{"x",25},{"BMW",25}} 

Person: Name: 'DEF' 
List<Car>:{{"BMW",21},{"y",25},{"BMW",26},{"x",25},{"BMW",20}} 

所需的输出:

Person: Name: 'ABC' 
List<Car>:{{"BMW",25},{"BMW",26},{"x",25},{"y",25},{"x",25}} 

Person: Name: 'DEF' 
List<Car>:{{"BMW",20},{"BMW",21},{"BMW",26},{"y",25},{"x",25}} 

我试图找到“宝马”的指标,并与第一指数掉它,但它不能正常工作。

+0

我有没有关于这个场景的想法,我试过了,但它不起作用,而且没有表现出来。 –

+0

您是否想按字母顺序排列汽车,还是保持订单相同,并且只将宝马移动到顶部? –

+0

不仅仅宝马是我的要求。 –

回答

0

这里是工作的解决方案:

public List<Person> GetSortedList(List<Person> personList) 
{ 
    foreach (var person in personList) 
    { 
     person.CarList=person.CarList.OrderByDescending(x => x.Name== "BMW").ToList(); 
    } 
return personList; 
} 
1
List<Car> orderedCarList = person.carList.OrderBy(s => (s.Name == "BMW") ? 0 : 1).ToList(); 
person.carList = orderedCarList; 
+0

它是personList不是人和需要列表排序。 –

0

如果你想就地进行排序,而无需为每个人创建一个新的列表或汽车,你可以做

foreach(Person p in personList) 
{ 
    p.carList.Sort((car1, car2) => 
     -(car1.Name == "BMW").CompareTo(car2.name == "BMW")); 
}