簡體   English   中英

如何使用 Linq 按嵌套列表的屬性對對象列表進行排序?

[英]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);

這樣,每組只能計算出最年輕成員的年齡一次。

排序列表<object>按嵌套列表<object>財產<div id="text_translate"><p>我有一個添加到另一個對象列表中的對象列表。 <strong>如何按對象子列表中的屬性對列表進行排序?</strong> 請參閱下面的 SUDO 代碼。 任何幫助將非常感激。 C#</p><pre> List&lt;object&gt; MainListOfObject = new List&lt;object&gt;(); List&lt;object&gt; subListObject_0 = new List&lt;object&gt;(); List&lt;object&gt; subListObject_1 = new List&lt;object&gt;(); List&lt;object&gt; subListObject_2 = new List&lt;object&gt;(); cat_a = {Age: 3, Colour: "white"} cat_b = {Age: 2, Colour: "black"} cat_c = {Age: 2.5, Colour: "black &amp; white"} dog_a = {Height: 0.5, EyeColour: "green"} dog_b = {Height: 0.6, EyeColour: "blue"} dog_c = {Height: 0.2, EyeColour: "brown"} Console.WriteLine(cat_a.Age); //output 1 Console.WriteLine(cat_b.Colour); //output "black" subListObject_0.Add(cat_a); subListObject_0.Add(dog_a); subListObject_1.Add(cat_b); subListObject_1.Add(dog_b); subListObject_2.Add(cat_c); subListObject_2.Add(dog_c); MainListOfObject.Add(subListObject_0); MainListOfObject.Add(subListObject_1); MainListOfObject.Add(subListObject_2); //How do I sort MainListOfObject by nested object property Age?</pre><p> ??? MainListOfObject.OrderBy(o[0] =&gt; o[0].Age).ToList(); ???</p><pre> Console.WriteLine(MainListOfObject[0][0].Age); //output 2 Console.WriteLine(MainListOfObject[1][0].Age); //output 2.5 Console.WriteLine(MainListOfObject[2][0].Age); //output 3</pre></div></object></object>

[英]Sort List<object> by nested List<object> property

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

相關問題 如何按屬性對對象列表進行排序 LINQ對對象列表進行排序 c#LINQ按作為對象列表的屬性的子屬性對列表進行排序 如何使用 Linq 或 Sort 處理對象列表的排序? 使用LINQ對列表及其所有嵌套對象進行排序 LINQ到對象-將列表分配給屬性 按屬性值對對象列表進行排序 如何使用冒泡排序C#按屬性對對象列表進行排序 Linq對象列表的並集列表(屬性) 排序列表<object>按嵌套列表<object>財產<div id="text_translate"><p>我有一個添加到另一個對象列表中的對象列表。 <strong>如何按對象子列表中的屬性對列表進行排序?</strong> 請參閱下面的 SUDO 代碼。 任何幫助將非常感激。 C#</p><pre> List&lt;object&gt; MainListOfObject = new List&lt;object&gt;(); List&lt;object&gt; subListObject_0 = new List&lt;object&gt;(); List&lt;object&gt; subListObject_1 = new List&lt;object&gt;(); List&lt;object&gt; subListObject_2 = new List&lt;object&gt;(); cat_a = {Age: 3, Colour: "white"} cat_b = {Age: 2, Colour: "black"} cat_c = {Age: 2.5, Colour: "black &amp; white"} dog_a = {Height: 0.5, EyeColour: "green"} dog_b = {Height: 0.6, EyeColour: "blue"} dog_c = {Height: 0.2, EyeColour: "brown"} Console.WriteLine(cat_a.Age); //output 1 Console.WriteLine(cat_b.Colour); //output "black" subListObject_0.Add(cat_a); subListObject_0.Add(dog_a); subListObject_1.Add(cat_b); subListObject_1.Add(dog_b); subListObject_2.Add(cat_c); subListObject_2.Add(dog_c); MainListOfObject.Add(subListObject_0); MainListOfObject.Add(subListObject_1); MainListOfObject.Add(subListObject_2); //How do I sort MainListOfObject by nested object property Age?</pre><p> ??? MainListOfObject.OrderBy(o[0] =&gt; o[0].Age).ToList(); ???</p><pre> Console.WriteLine(MainListOfObject[0][0].Age); //output 2 Console.WriteLine(MainListOfObject[1][0].Age); //output 2.5 Console.WriteLine(MainListOfObject[2][0].Age); //output 3</pre></div></object></object>
 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM