LINQ入门:如何从列表中排除Level最大值对应的记录
用LINQ排除最高Level值的记录解决方案
嗨,刚接触LINQ确实会有从循环思维转成声明式思维的适应过程,我来帮你搞定这个需求!
首先咱们先明确目标:先找出数据集中的最高Level值,然后筛选掉所有等于这个值的记录。用LINQ可以很简洁地实现,不用再写繁琐的for循环啦。
步骤拆解
- 定义数据结构:先假设你的数据是封装在一个类里的(比如
Employee),这样LINQ操作起来更方便:
public class Employee { public string Name { get; set; } public int ID { get; set; } public int Level { get; set; } }
- 初始化数据列表:把你提供的测试数据填充进去:
var employees = new List<Employee> { new Employee { Name = "aaa", ID = 123, Level = 0 }, new Employee { Name = "bbb", ID = 122, Level = 1 }, new Employee { Name = "ccc", ID = 222, Level = 2 }, new Employee { Name = "ddd", ID = 223, Level = 3 } };
- 实现筛选逻辑:
- 第一步先获取所有记录中的最高
Level值(只计算一次,性能更优) - 第二步用
Where方法筛选出Level不等于最高值的记录
- 第一步先获取所有记录中的最高
代码如下:
// 先获取最高Level值 int maxLevel = employees.Max(e => e.Level); // 筛选排除最高Level的记录 var filteredEmployees = employees.Where(e => e.Level != maxLevel).ToList();
如果你想把两行合并成一句也可以,不过分开写可读性更好:
var filteredEmployees = employees.Where(e => e.Level != employees.Max(e => e.Level)).ToList();
额外提示
如果你的数据集可能为空,记得加个判断避免空序列异常:
var filteredEmployees = new List<Employee>(); if (employees.Any()) { int maxLevel = employees.Max(e => e.Level); filteredEmployees = employees.Where(e => e.Level != maxLevel).ToList(); }
运行上面的代码,最终得到的结果就是排除了Level=3的ddd记录,剩下的三条数据啦!
内容的提问来源于stack exchange,提问作者TrevorGoodchild
相关产品推荐
相关产品推荐

