如何使用LINQ对包含姓名文本的List集合按指定姓氏排序
LINQ 筛选指定姓氏学生集合实现
首先给出和示例对齐的Student类定义:
public class Student { // 存储全名的公开属性 public string FullName { get; } public Student(string fullName) { FullName = fullName; } }
你给出的集合初始化代码:
List<Student> students = new List<Student>() { new Student("John Doe"), new Student("Lucy Novak") };
核心实现逻辑
1. 规则说明
示例为英文姓名,姓氏为全名按空格分割后的最后一段;如果是中文姓在前的场景,把下文代码中的Last()改为First()即可。
2. LINQ 代码(支持筛选+自定义排序)
这里以筛选姓氏为Doe、按全名升序排序为例:
// 目标筛选姓氏 string targetSurname = "Doe"; // LINQ方法语法实现,更简洁常用 var resultList = students // 筛选匹配姓氏的元素,加忽略大小写参数兼容不同大小写的输入 .Where(stu => stu.FullName.Split(' ').Last().Equals(targetSurname, StringComparison.OrdinalIgnoreCase)) // 不需要排序可以直接删掉下面这行 .OrderBy(stu => stu.FullName) .ToList();
3. 输出效果实现
if (resultList.Any()) { Console.WriteLine($"姓氏为{targetSurname}的学生:{string.Join("、", resultList.Select(stu => stu.FullName))}"); }
运行后输出结果为:
姓氏为Doe的学生:John Doe
注意事项
- 如果姓名存在多个连续空格的情况,可以把
Split(' ')改为Split(' ', StringSplitOptions.RemoveEmptyEntries)避免空值匹配错误 - 不需要忽略大小写匹配的话,删掉
StringComparison.OrdinalIgnoreCase参数即可
内容的提问来源于stack exchange,提问作者loner
相关产品推荐
相关产品推荐

