在对象列表的数组字段中查找最大元素
Find the max element in array field in the list of objects
假设我有一个 class 简单定义的学生:
public string Name { get; set; }
public int[] Marks { get; set; }
现在我创建一个学生列表:
List<Student> students = new List<User>();
students.Add(new Student("John", { 3, 4, 5, 5, 4 }));
students.Add(new Student("Adam", { 2, 5, 5, 1, 3 }));
students.Add(new Student("Katy", { 6, 3, 2, 2, 3 }));
现在,我需要创建一个 LINQ 查询来检索所有学生中最好的单项分数。在本例中,它将是 6,因为这是所有数组中的最大值。
我想到了这样的事情:
var query =
from student in students
where student.Marks is not null
group student by student.Marks into studentMarks
group studentMarks.Key.Max() by studentMarks.Key.Max() into studentMarks
orderby studentMarks.Key descending
select studentMarks.Key;
Console.WriteLine(query.ElementAt(0)); // output: 6
现在,我怎样才能以更好的方式编写它,以便它只输出单个 int,所以我可以简单地说:
Console.WriteLine(query);
使用SelectMany:
int topMark = students.SelectMany(s => s.Marks).Max() // 6
假设我有一个 class 简单定义的学生:
public string Name { get; set; }
public int[] Marks { get; set; }
现在我创建一个学生列表:
List<Student> students = new List<User>();
students.Add(new Student("John", { 3, 4, 5, 5, 4 }));
students.Add(new Student("Adam", { 2, 5, 5, 1, 3 }));
students.Add(new Student("Katy", { 6, 3, 2, 2, 3 }));
现在,我需要创建一个 LINQ 查询来检索所有学生中最好的单项分数。在本例中,它将是 6,因为这是所有数组中的最大值。 我想到了这样的事情:
var query =
from student in students
where student.Marks is not null
group student by student.Marks into studentMarks
group studentMarks.Key.Max() by studentMarks.Key.Max() into studentMarks
orderby studentMarks.Key descending
select studentMarks.Key;
Console.WriteLine(query.ElementAt(0)); // output: 6
现在,我怎样才能以更好的方式编写它,以便它只输出单个 int,所以我可以简单地说:
Console.WriteLine(query);
使用SelectMany:
int topMark = students.SelectMany(s => s.Marks).Max() // 6