2014-04-11 38 views
1

我需要按點數排序,然後按職位排列。我如何通過職位列表屬性訂購我的列表?按名單排列的訂單清單<int>財產

public class Sailor 
{ 
    public string Name { get; set; } 
    public int Points { get; set; } 
    public List<int> Positions { get; set; } 

    public Sailor(string name, int points, List<int> positions) 
    { 
     Name = name; 
     Points = points; 
     Positions = positions; 
    } 
} 

var sailors = new List<Sailor> 
        { 
         new Sailor("Carl", 20, new List<int> { 2, 2, 4, 1, 1 }), 
         new Sailor("Paul", 10, new List<int> { 4, 5, 3, 2, 5 }), 
         new Sailor("Anna", 20, new List<int> { 1, 1, 1, 3, 4 }), 
         new Sailor("Lisa", 11, new List<int> { 3, 4, 5, 5, 2 }), 
         new Sailor("Otto", 11, new List<int> { 5, 3, 2, 4, 3 }) 
        }; 

foreach (var sailor in sailors) 
{ 
    sailor.Positions.Sort(); 
} 

var orderedListOfSailors = sailors.OrderByDescending(x => x.Points); 

這給了我:

Carl, Anna, Lisa, Otto, Paul 

我希望它是:

Anna, Carl, Otto, Lisa, Paul 

爲什麼?因爲安娜有3個第一個地方,卡爾有2奧托具有2,3,3,莉莎有2個,3個,4

回答

0

該問題可以通過使用上的Sailor實例辭書odering來解決;您可以實現一個自定義比較器Sailor或使用ThenBy擴展方法。

0

訂購後通過Points訂購,再次按地點數量排列。

var orderedListOfSailors = sailors 
         .OrderByDescending(x => x.Points) 
         .ThenByDescending(x => x.Positions.Count(y => y == 1)) 
         .ThenByDescending(x => x.Positions.Count(y => y == 2)) 
         .ThenByDescending(x => x.Positions.Count(y => y == 3)) 
         .ThenByDescending(x => x.Positions.Count(y => y == 4));