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

时间:2013-09-25 16:11:11

标签: c# linq

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

class Employee{
int EmpId;
int EmpName }

Class Manager{
int ManagerID; //is the empId of an employee who is Manager
}

我想要一个EmpName列表,它不是一个使用LINQ的管理器。

我试过了:

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

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

UPDATE1:

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

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

1 个答案:

答案 0 :(得分: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)));
}

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