使用 LINQ 查找两个数据对象之间的差异

本文关键字:对象 数据 之间 两个 查找 LINQ 使用 | 更新日期: 2023-09-27 18:32:50

我有 2 个数据对象。员工和经理

class Employee{
int EmpId;
int EmpName }
Class Manager{
int ManagerID; //is the empId of an employee who is Manager
}

我想要一个不是在单个语句中使用 LINQ 的经理的 EmpName 列表。

我试过这个:

var employeeIdsWhoAreNotManagers = EmployeeList.Select(x=>x.EmpId).Except(Managerlist.Select(x=>x.ManagerId));

但这只返回我 EmpId。然后,我必须再写一个linq才能获得EmpName。

更新1:

 empNamesList = EmployeeList.Where(x=>x.employeeIdsWhoAreNotManagers.Contains(x.empId)).Select(x=>x.empName);

如何合并到一个直接生成 EmpName 列表的 LINQ 查询中?

使用 LINQ 查找两个数据对象之间的差异

如果是 Linq 反对,可以使用扩展方法ExceptBy

public static IEnumerable<T1> ExceptBy<T1, T2, R>(
    this IEnumerable<T1> source, 
    IEnumerable<T2> other, 
    Func<T1,R> keySelector1, 
    Func<T2,R> keySelector2)
{
    HashSet<R> set = new HashSet<R>(other.Select(x => keySelector2(x)));
    return source.Where(item => set.Add(keySelector1(item)));
}

.

 EmployeeList.ExceptBy(Managerlist, x=>x.EmpId , y=>y.ManagerId));