2016-12-25 70 views
2

我有一个person列表包含person有一个weightage属性。如何在Linq提取方法中使用order by和group by?

Person.cs

public class Person 
{ 
    public int Weight { get; set; } 
    public int Age { get; set; } 
} 

Program.cs:应列出

List<Person> personList = new List<Person>(); 

personList.Add(new Person { Age = 15, Weight = 68 }); 
personList.Add(new Person { Age = 19, Weight = 75 }); 
personList.Add(new Person { Age = 17, Weight = 68 }); 
personList.Add(new Person { Age = 15, Weight = 55 }); 
personList.Add(new Person { Age = 15, Weight = 53 }); 
personList.Add(new Person { Age = 17, Weight = 88 }); 
personList.Add(new Person { Age = 19, Weight = 45 }); 
personList.Add(new Person { Age = 20, Weight = 88 }); 

//Grouped person list 
List<People> GroupedPersonList = new List<People>(); 

GroupedPersonList = personList.OrderBy(x => x.Weight).???? 

元素:由age分组,每个组应与最高的权重进行选择(我要订购该列表由age,但该列表仅包含该年龄段的最重人,然后我将通过此创建一个新列表。) 新的新列表应如下所示:

(GroupedPersonList Contents)=>

Age | Weight 
-------|------- 
15  | 68 
17  | 88 
19  | 75 
20  | 88 

我如何能做到这一点的LINQ提取方法?

回答

1

您可以使用GroupBy这样的:

var GroupedPersonList = personList.GroupBy(x => x.Age , (key,element) => new 
{ 
    Age = key, 
    Weight = element.Max(c=>c.Weight) 
}); 
+0

谢谢你,有一个愉快的一天 –

0

...或类似

var groupedData = from person in people 
        orderby person.Age 
        group person by person.Age into ageGroup 
        select new { Age = ageGroup.Key, MaxWeight = ageGroup.Max(p => p.Weight) }; 

groupedData.ToList().ForEach(g => 
{ 
    Console.WriteLine("{0}, {1}", g.Age, g.MaxWeight); 
}); 
+0

谢谢你,有一个愉快的一天 –