我有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列表?
如果是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)
| 归档时间: |
|
| 查看次数: |
733 次 |
| 最近记录: |