如何使用LINQ筛选Person列表中角色属于允许列表的对象
使用LINQ过滤符合允许角色列表的Person对象
没问题,这事儿用LINQ的Where方法结合集合的Contains方法就能轻松搞定,完全不用写显式循环,代码简洁还符合你的需求。
核心过滤代码
直接用Where筛选每个Person的Role是否存在于allowedRoles列表中就行:
var filteredPersons = persons.Where(p => allowedRoles.Contains(p.Role)).ToList();
完整示例代码
把你的代码上下文整合起来,完整的实现是这样的:
// 定义Person类 public class Person { public string Name { get; set; } public string Role { get; set; } } // 硬编码的允许角色列表 var allowedRoles = new List<string>{"Developer","Admin","Recruiter"}; // 假设这是你从XML解析得到的Person列表 var persons = new List<Person> { new Person { Name = "Alice", Role = "Developer" }, new Person { Name = "Bob", Role = "Designer" }, // 不在允许列表里,会被过滤掉 new Person { Name = "Charlie", Role = "Admin" } }; // LINQ过滤 var filteredPersons = persons.Where(p => allowedRoles.Contains(p.Role)).ToList(); // 输出结果验证 foreach (var person in filteredPersons) { Console.WriteLine($"{person.Name} - {person.Role}"); }
运行这段代码后,只会输出Alice和Charlie的信息,Bob因为Role不在允许列表里会被排除。
额外优化:处理大小写敏感问题
如果XML里的角色可能有大小写差异(比如输入的是developer而不是Developer),可以用Contains的重载方法指定忽略大小写的比较器:
var filteredPersons = persons.Where(p => allowedRoles.Contains(p.Role, StringComparer.OrdinalIgnoreCase)).ToList();
这样不管是大写还是小写的角色名,只要内容匹配就会被保留,灵活性更高。
内容的提问来源于stack exchange,提问作者Mass
相关产品推荐
相关产品推荐

