如何分组?在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岩石

    亚历克斯
  1. 亚伦

组2威廉

    查理
  1. Brian

我如何在c#中使用LINQ实现这一点?

var listOfCategories = new List<Employee>();
PopulateData(listOfCategories );
var listGroup = listOfCategories .GroupBy(x => x.manager_id);

但是键现在是Manager_id字符串。获取管理器的一种方法是使用Find并根据id获取Employee对象。

我相信LINQ可以做到这一点。

如果有人能给我指出正确的方向,我会很高兴的。

如何分组?在c#中使用LINQ查询,当键与你的类型T相同时,对List<T>进行分组

这可能就是你要找的:

var listGroup = listOfCategories.GroupBy(x => listOfCategories.FirstOrDefault(y => y.emp_id == x.manager_id).emp_name);

或者,如果您希望键是完整的雇员对象,您可以从lambda表达式中删除.emp_name部分。