首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >两个不同类型集合的位置交集

两个不同类型集合的位置交集
EN

Stack Overflow用户
提问于 2016-04-14 20:22:28
回答 2查看 179关注 0票数 2

我有一组Employee对象

代码语言:javascript
复制
IEnumerable<Employee> employees;

这里的雇员看起来是这样的:

代码语言:javascript
复制
    class Employee
    {
        int Id {get; set;}
        int Name {get; set;}
    }

我还有第二个收藏品:

代码语言:javascript
复制
IEnumerable<int> fired;

我想要做一个雇员的交集,并根据雇员的Id属性在适当的位置被解雇。类似于:

代码语言:javascript
复制
employees.Intersect(fired)

当然,这是行不通的,因为雇员和被解雇的人是不同的类型。我知道我可以这样做:

代码语言:javascript
复制
List<int> empIds = null;
employees.Foreach(x => empIds.Add(x.Id);

然后做一个empIds的交集,然后触发,然后将它合并回来。但必须有办法做到这一点,而不宣布一个新的名单。我的目标是有一个通过引用传递员工集合的方法,它将“过滤掉”被解雇的员工:

代码语言:javascript
复制
void YourRFired(ref IEnumerable<employee> employees)
{
    IEnumerable<int> fired = .....

   // intersect employee and fired here to get a list of employees that are      
    not fired.
}  

谢谢

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-04-14 20:30:46

去哪儿怎么样?

代码语言:javascript
复制
var notFiredEmployees = employees.Where(e=>!fired.Contains(e.Id));
票数 2
EN

Stack Overflow用户

发布于 2016-04-14 20:31:10

就像这样

代码语言:javascript
复制
IEnumerable<Employee> employees;
IEnumerable<int> firedEmployeeIds;

//return all employees who are not fired
return employees
    .GroupJoin(firedEmployeeIds, e => e.Id, f => f, (employee, ids) => new 
    { 
        employee, 
        fired = ids.Any() == false 
    })
    .Where(x => x.fired == false)
    .Select(x => x.employee);
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36633246

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档