2012-03-04 11 views
0

Linqを使って次の人々のリストを並べ替えるにはどうすればいいですか?IDによってグループ化され、私が欲しいLinqを使用してリストの順序を維持しながら注文する方法とgroupby

List<person>people = new List<person>(); 
people.Add(new Person(1, "joe")); 
people.Add(new Person(1, "john")); 
people.Add(new Person(2, "bob")); 
people.Add(new Person(3, "tracy")); 
people.Add(new Person(2, "harry")); 
people.Add(new Person(1, "ellen")); 
people.Add(new Person(3, "mary")); 

結果:

Person(1, "joe") 
Person(1, "john") 
Person(1, "ellen") 
Person(2, "bob") 
Person(2, "harry") 
Person(3, "tracy") 
Person(3, "mary") 

答えて

1
var result = people.Select((person,index)=>new{person,index}) 
     .OrderBy(pair => pair.person.ID) 
     .ThenBy(pair => pair.index) 
     .Select(pair => pair.person) 
     .ToArray(); 
0

あなたは、以下の方法でLINQを使用して、このリストを注文することができます.....これは十分でしょう

var orderedList = from p in people 
        orderby p.Id ascending 
        select p; 
2

var orderedPeople = people.OrderBy(p => p.Id).ToList(); 

Enumerable.OrderBy行う安定ソート:

この方法は、安定したソートを行います。つまり、2つの 要素のキーが等しい場合、要素の順序は保持されます。

guarantee that items will be returned in the order they were addedである。だからあなたは望む結果を得るでしょう:

Person(1, "joe") 
Person(1, "john") 
Person(1, "ellen") 
Person(2, "bob") 
Person(2, "harry") 
Person(3, "tracy") 
Person(3, "mary") 
関連する問題