如何使用LINQ让同名记录忽略quantity排序并归为一组?
完全可以用LINQ实现这个需求
你要的效果核心是:把同first_name的记录凑在一起,整体排序时按该名字对应记录里的最大quantity降序,组内的记录可以按需排序,用LINQ的分组+排序就能搞定。
代码示例
假设你的数据实体类是Employee(包含employee_id、first_name这些属性),直接写这段代码就行:
var sortedEmployees = employees // 先按first_name把同名字的归为一组 .GroupBy(emp => emp.first_name) // 对分组排序:按每组里最大的quantity从高到低排 .OrderByDescending(group => group.Max(emp => emp.quantity)) // 把每个分组拆开来,组内按quantity降序排(和你要的结果匹配) .SelectMany(group => group.OrderByDescending(emp => emp.quantity)) .ToList();
代码说明
GroupBy(emp => emp.first_name):这一步直接把所有John的记录、Michael的记录分别归成两组,保证同名字的不会被拆开。OrderByDescending(group => group.Max(emp => emp.quantity)):因为John组里最大的quantity是250,比Michael组的200大,所以John组会排在前面,符合你要的整体顺序。SelectMany(...):把分组拆成单条记录,同时组内按quantity降序排,这样John组里quantity高的2号员工会排在1号前面,和你期望的结果完全一致。如果组内不想按quantity排,换成OrderBy(emp => emp.employee_id)或者OrderBy(emp => emp.last_name)也可以。
最终结果
运行后得到的结果就是你想要的:
| employee_id | first_name | last_name | department | quantity | |
|---|---|---|---|---|---|
| 2 | John | Johnson | emily@example.com | HR | 250 |
| 1 | John | Smith | john@example.com | IT | 150 |
| 3 | Michael | Davis | michael@example.com | Sales | 200 |
内容的提问来源于stack exchange,提问作者wittream
相关产品推荐
相关产品推荐

