2012-11-27 52 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")); 
}