C# 如何使用LINQ C筛选列表
我需要把一张名单过滤成欠债最多的学生 标准是,只有ZachetdindNotPass在所有列表中具有最大值和最大-1的学生才包括在结果中C# 如何使用LINQ C筛选列表,c#,linq,C#,Linq,我需要把一张名单过滤成欠债最多的学生 标准是,只有ZachetdindNotPass在所有列表中具有最大值和最大-1的学生才包括在结果中 var StudentsWitHighestDebts = students .Where(s => s.ZachetDidNotPass.(some condition)) .OrderBy(s => s.Name) .ToList(); 例如,给定一个Z
var StudentsWitHighestDebts = students
.Where(s => s.ZachetDidNotPass.(some condition))
.OrderBy(s => s.Name)
.ToList();
例如,给定一个ZachetdindNotPass值为0 1 2 5 6 7的学生列表。产生的负债最高的学生应仅包含ZachetDidNotPass中值为7和6的学生。第一个选项:选择2个负债最高的学生,并按ZachetdindNotPass筛选学生:
var highestDebts = students.Select(s => s.ZachetDidNotPass)
.OrderByDescending(p => p).Take(2).ToArray();
var studentsWitHighestDebts = students
.Where(s => highestDebts.Contains(s.ZachetDidNotPass))
.OrderByDescending(s => s.ZachetDidNotPass).ToList();
第二个选项-按ZachetDidNotPass分组,按键降序对组进行排序,选择前2个组并从组中选择学生
var studentsWitHighestDebts = students.GroupBy(s => s.ZachetDidNotPass)
.OrderByDescending(g => g.Key).Take(2)
.SelectMany(g => g).ToList();
第三种选择是债务最高和债务最高的学生-1
var highestDebt = students.Max(s => s.ZachetDidNotPass);
var studentsWitHighestDebts = students
.Where(s => s.ZachetDidNotPass == highestDebt || s.ZachetDidNotPass == highestDebt - 1)
.OrderByDescending(s => s.ZachetDidNotPass).ToList();
只需在另一个地方加上。这真是一个愚蠢的问题,我需要被狠狠地删掉:?@Patrickhoffman仍然无法理解-在某些情况下,什么情况下只能为max检查?然后,是的,我将在max-1的位置再添加一个…不确定,因为我没有真正理解你的问题。你能用最大扩展法吗?对于Max-1,使用OrderByDescending并获取第二项。第二项在时间上不是最优的。您应该解释第一个选项和第三个选项之间的区别。例如,如果值为0 1 2 3 4 5 7,我们是否应该让学生使用5?