linq - 如何根据子集合属性对集合进行排序

标签 linq sorting c#-3.0 lambda sql-order-by

我想根据子集合属性对集合进行排序。

//the subcollection
public class Salary
{
   public int SalaryId {get;set;}
   public int SalaryYear {get;set;}
   public double SalaryValue {get;set;} //this is the field we want to sort the parent collection "Person"
}

//the main collection
public class Person
{
   public int PersonId {get;set;}
   public string PersonName {get;set;}
   public List<Salary> Salaries {get;set;}
}

下面只是为了测试目的,我正在准备我的个人收藏,每个人都有薪水内部收藏:
List<Person> people = new List<Person>();
//add two salaries for Junior
people.Add(new Person { PersonId = 1, PersonName = "Junior" });
people[0].Salaries.Add(new Salary { SalaryId=1, SalaryYear=2011, SalaryValue=80000 });
people[0].Salaries.Add(new Salary { SalaryId=2, SalaryYear=2010, SalaryValue=70000 });

//add two salaries for Johanna
people.Add(new Person { PersonId = 2, PersonName = "Johanna" });
people[0].Salaries.Add(new Salary { SalaryId=3, SalaryYear=2011, SalaryValue=40000 });
people[0].Salaries.Add(new Salary { SalaryId=4, SalaryYear=2010, SalaryValue=30000 });

现在我们想要对 people 集合进行排序,但是使用他们内部集合 SalaryValue 作为参数。

如何对 List 进行排序但在 Salaries 内部集合上使用 LINQ/Lambda 表达式?

所以我会有:
PersonName: Johanna, SalaryValue=30000, SalaryYear=2010
PersonName: Johanna, SalaryValue=40000, SalaryYear=2011
PersonName: Junior, SalaryValue=70000, SalaryYear=2010
PersonName: Junior, SalaryValue=80000, SalaryYear=2011

最佳答案

对我来说,这看起来像:

var query = from person in people
            from salary in person.Salaries
            orderby salary.SalaryValue
            select new { person, salary };

foreach (var pair in query)
{
    Console.WriteLine(pair);
}

请注意,您并没有真正对一组​​人进行排序 - 您正在对一组(人,薪水)进行排序,这就是具有两个 from 的扁平化效果。条款确实如此。

(以上不会提供完全相同的输出,但是一旦你得到了这个人和他们的薪水,你就可以得到其他值。)

关于linq - 如何根据子集合属性对集合进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3471588/

相关文章:

c# - 如何直接从 FTP 文件夹中的流创建和保存文件?

c# - 如何在 c# 中对两个列表进行笛卡尔连接?

c# - C# 中的字段和属性最佳实践

c# - 将 LINQ 用于类型对象列表

java - 如何停止获取用户输入

java - 按自定义字典顺序对字符串进行排序

python - 什么是查找重复对象的好 pythonic 方法?

lambda - 此 lambda 表达式的 C# 2.0 等效代码是什么

asp.net - LINQ 实体Where 子句位置不正确

linq - 在 LINQ 查询中删除多条记录的最佳方法?