Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/three.js/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何使用LINQ C筛选列表_C#_Linq - Fatal编程技术网

C# 如何使用LINQ C筛选列表

C# 如何使用LINQ C筛选列表,c#,linq,C#,Linq,我需要把一张名单过滤成欠债最多的学生 标准是,只有ZachetdindNotPass在所有列表中具有最大值和最大-1的学生才包括在结果中 var StudentsWitHighestDebts = students .Where(s => s.ZachetDidNotPass.(some condition)) .OrderBy(s => s.Name) .ToList(); 例如,给定一个Z

我需要把一张名单过滤成欠债最多的学生

标准是,只有ZachetdindNotPass在所有列表中具有最大值和最大-1的学生才包括在结果中

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?