2015-02-23 109 views
-2

假设我有一个Person对象的集合,并且每个人都有一个头发颜色属性(值为:Blonde,Black,Brown,Red,White)。LINQ:通过组计数收集订单

我该如何使用LINQ根据它们的组数(按降序)重新排序这些Person对象?

例子:

鲍勃(棕色),杰克(金色),马克(布朗),比尔(白色),乔治(布朗),吉姆(金色),托马斯(红色)

应重新排序到:

鲍勃(布朗),马克(布朗),乔治(棕色),杰克(金色),吉姆(金色),比尔(白色),托马斯(红色)

与我们一样,性能是一个关键问题所以最少的代码行会更可取。

+6

重点外卖:代码行==性能。 – 2015-02-23 14:41:56

+0

究竟你的问题是什么?你有什么尝试? – Dirk 2015-02-23 14:43:04

+0

我很困惑,不应该在第二次听到法案之前托马斯应该在听吗? – oqx 2015-02-23 14:47:03

回答

1

也许这个作品:

List<Person> persons = 
    new List<Person>() { 
    new Person("Bob", "Brown"), 
    new Person("Jack", "Blonde"), 
    new Person("Mark", "Brown"), 
    new Person("Bill", "White"), 
    new Person("George", "Brown"), 
    new Person("Jim", "Blonde"), 
    new Person("Thomas", "Red") 
}; 

foreach (var a in persons.GroupBy(p => p.HairColor).OrderByDescending(g => g.Count()).SelectMany(g => g)) { 
    Console.WriteLine(a); 
} 

哪里..​​.

public class Person { 
    public Person(string name, string hairColor) { 
     Name = name; 
     HairColor = hairColor; 
    } 
    public string Name { get; set; } 
    public string HairColor { get; set; } 

    public override string ToString() { 
     return Name + " (" + HairColor + ")"; 
    } 
} 
+0

完美的玉米片....谢谢! – ZiggY 2015-02-24 08:56:15