2016-12-25 50 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

謝謝你,有一個愉快的一天 –