[英]How to sort a list of objects by a property of a nested list with Linq?
假設我有一個組列表。 每個組都有一個人員列表。 如何按年齡最小的人對組進行排序?
var groups = new List<Group>{groupA, groupB, groupC};
public class Group {
public string Name {get; set;}
public List<Person> Members {get; set;}
}
public class Person {
public string Name {get; set;}
public double Age {get; set;}
}
您可以使用OrderBy
方法與每個組的Members
列表的Min
年齡
var groups = new List<Group>
{
new Group {Name = "group1", Members = new List<Person> {new Person {Age = 5}, new Person {Age = 2}}},
new Group {Name = "group2", Members = new List<Person> {new Person {Age = 3}, new Person {Age = 4}}},
new Group {Name = "group3", Members = new List<Person> {new Person {Age = 1}}}
};
var result = groups.OrderBy(g => g.Members.Min(m => m.Age));
在上面的示例中,它為您提供group3 (最小Age
為 1)、 group1 (最小Age
為 2)、 group2 (最小Age
為 3)的順序
OrderBy
允許您使用任何您想要的表達式,無論多么復雜,因此您可以編寫
var byYongestMember = groups
.OrderBy(g => g.Select(p => p.Age).Min());
但是,當每個組中有很多人並且組本身很大時,這可能會有些慢,因此您最好將每個組與其最小成員的年齡配對,對配對進行排序,然后投影團體:
var byYongestMember = groups
.Select(g => new {
Group = g
, MinAge = g.Members.Min(p => p.Age)
})
.OrderBy(p => p.MinAge)
.Select(p => p.Group);
這樣,每組只能計算出最年輕成員的年齡一次。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.