如何分组?在c#中使用LINQ查询,当键与你的类型T相同时,对List进行分组
本文关键字:类型 List 查询 LINQ | 更新日期: 2023-09-27 18:19:13
我有一个类如下
class Employee
{
string emp_id;
string emp_name;
string manager_id;
bool isManager;
}
列表中的数据如下
[1, Alex, 5, false]
[2, Charlie, 6, false]
[3, Aaron, 5, false]
[4, Brian, 6, false]
[5, Rock, "", true]
[6, William, "", true]
正如您从上面的数据中注意到的,前4名员工不是经理,因此填充了他们的manager_id,但最后2名是经理,因此没有manager_id。它也可以通过bool值来注意。
现在,这应该分组,以便共同经理下的员工分组在一起,该组的键应该是他们的经理。
因此,根据数据,它应该按如下方式分组(为了简单起见,我只是在下面键入名称,实际上它们都将是Employee类对象)
组1岩石
- 亚历克斯亚伦
组2威廉
- 查理Brian
我如何在c#中使用LINQ实现这一点?
var listOfCategories = new List<Employee>();
PopulateData(listOfCategories );
var listGroup = listOfCategories .GroupBy(x => x.manager_id);
但是键现在是Manager_id字符串。获取管理器的一种方法是使用Find并根据id获取Employee对象。
我相信LINQ可以做到这一点。
如果有人能给我指出正确的方向,我会很高兴的。这可能就是你要找的:
var listGroup = listOfCategories.GroupBy(x => listOfCategories.FirstOrDefault(y => y.emp_id == x.manager_id).emp_name);
或者,如果您希望键是完整的雇员对象,您可以从lambda表达式中删除.emp_name
部分。