繁体   English   中英

如何使用LINQ C#过滤列表

[英]How to filter List With LINQ C#

我需要将List<Students>过滤成StudentsWitHighestDebts

标准是只有ZachetDidNotPass在所有List<Students>中具有最大值和maximum-1 List<Students>才会包含在结果中。

var StudentsWitHighestDebts = students
               .Where(s => s.ZachetDidNotPass.(some condition))
               .OrderBy(s => s.Name)
               .ToList();

例如,给出具有ZachetDidNotPass0 1 2 5 6 7的学生列表。 生成的StudentsWitHighestDebts应该只包含ZachetDidNotPass具有7 and 6值的ZachetDidNotPass

第一种选择:承担2笔最高债务并按ZachetDidNotPass筛选学生:

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();

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM