带嵌套列表的 LINQ 组
LINQ Group with nested list
我正在尝试使用 LINQ 对我的数据进行分组。这是我使用的模型:
public class Employee
{
public string FirstName {get;set;}
public string LastName {get;set;}
public IEnumerable<string> Groups {get;set;}
}
我有 IEnumerable<Employees>
,我想转换它:
FirstName=TestName1, SecondName=TestName1, Groups { Group1, Group2 },
FirstName=TestName2, SecondName=TestName2, Groups { Group1, Group3 }
...
为此:
Key=Group1,
Values:
{
FirstName=TestName1, SecondName=TestName1, Groups { Group1, Group2 };
FirstName=TestName2, SecondName=TestName2, Groups { Group1, Group3 };
};
Key=Group2,
Values:
{
FirstName=TestName1, SecondName=TestName1, Groups { Group1, Group2 };
};
...
因此,我需要以某种方式将'grouping' Groups
Employee
的分组还原为Group
Employees
的分组。我尝试将 GroupJoin
Employees
与 Groups
一起使用(通过 employee.SelectMany(e => e.Groups).Distinct();
提取它们),但我的查询不起作用。有人可以帮我吗?
分组前需要使用SelectMany
展开分组列表:
List<Employee> employees = GetEmployees();
IEnumerable<IGrouping<string, Employee>> groupedEmployees = employees
.SelectMany(employee => employee.Groups.Select(group => (employee, group)))
.GroupBy(pair => pair.group, pair => pair.employee);
您也可以先识别组,然后再创建字典。
var groups = employees
.SelectMany(e => e.Groups)
.Distinct();
var employeesByGroup = groups
.ToDictionary(
group => group,
group => employees
.Where(e => e.Groups.Contains(group)));
注意:如下所述,这将多次遍历源列表,如果 employees
很大,这可能会导致性能问题。
我正在尝试使用 LINQ 对我的数据进行分组。这是我使用的模型:
public class Employee
{
public string FirstName {get;set;}
public string LastName {get;set;}
public IEnumerable<string> Groups {get;set;}
}
我有 IEnumerable<Employees>
,我想转换它:
FirstName=TestName1, SecondName=TestName1, Groups { Group1, Group2 },
FirstName=TestName2, SecondName=TestName2, Groups { Group1, Group3 }
...
为此:
Key=Group1,
Values:
{
FirstName=TestName1, SecondName=TestName1, Groups { Group1, Group2 };
FirstName=TestName2, SecondName=TestName2, Groups { Group1, Group3 };
};
Key=Group2,
Values:
{
FirstName=TestName1, SecondName=TestName1, Groups { Group1, Group2 };
};
...
因此,我需要以某种方式将'grouping' Groups
Employee
的分组还原为Group
Employees
的分组。我尝试将 GroupJoin
Employees
与 Groups
一起使用(通过 employee.SelectMany(e => e.Groups).Distinct();
提取它们),但我的查询不起作用。有人可以帮我吗?
分组前需要使用SelectMany
展开分组列表:
List<Employee> employees = GetEmployees();
IEnumerable<IGrouping<string, Employee>> groupedEmployees = employees
.SelectMany(employee => employee.Groups.Select(group => (employee, group)))
.GroupBy(pair => pair.group, pair => pair.employee);
您也可以先识别组,然后再创建字典。
var groups = employees
.SelectMany(e => e.Groups)
.Distinct();
var employeesByGroup = groups
.ToDictionary(
group => group,
group => employees
.Where(e => e.Groups.Contains(group)));
注意:如下所述,这将多次遍历源列表,如果 employees
很大,这可能会导致性能问题。