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

Roc*_*art 1 c# linq

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

class Employee{
int EmpId;
int EmpName }

Class Manager{
int ManagerID; //is the empId of an employee who is Manager
}
Run Code Online (Sandbox Code Playgroud)

我想要一个EmpName列表,它不是一个在单个语句中使用LINQ的Manager.

我试过这个:

var employeeIdsWhoAreNotManagers = EmployeeList.Select(x=>x.EmpId).Except(Managerlist.Select(x=>x.ManagerId));
Run Code Online (Sandbox Code Playgroud)

但这只会让我回到EmpId.然后我又要写一个linq来获得EmpName.

UPDATE1:

 empNamesList = EmployeeList.Where(x=>x.employeeIdsWhoAreNotManagers.Contains(x.empId)).Select(x=>x.empName);
Run Code Online (Sandbox Code Playgroud)

如何组合成单个LINQ查询直接导致我的EmpName列表?

I4V*_*I4V 6

如果是Linq to object,则可以使用扩展方法 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)));
}
Run Code Online (Sandbox Code Playgroud)

.

 EmployeeList.ExceptBy(Managerlist, x=>x.EmpId , y=>y.ManagerId));
Run Code Online (Sandbox Code Playgroud)