我们说我们有2套
A = [PersonA,PersonB];
B = [ManagerZ,ManagerT,ManagerY];
结果:ManagerT,ManagerY
A中的对象与B中的对象之间存在一对一的映射。 我对B中那些在A中存在这样一个条目的对象感兴趣。
为了完整性,我们假设我们匹配名为Name
答案 0 :(得分:3)
您必须在两个列表上执行联接:
var query =
from person in persons
join manager in managers on person.Name equals manager.Name
select new { Person = person, Manager = manager };
这将从Person
- 数据集中选择所有数据以及Manager
- 数据集中的相应数据。
另外,您可以将结果展平为数据类型,为每次匹配提供整个数据:
select new { Name = person.Name, Age = person.Age, Departement = Manager.Departement }
或者,如果您只对B
中与select manager
匹配的项目感兴趣,请使用<{1}}。
答案 1 :(得分:3)
尝试以下
SetB.Where(b => SetA.Any(a => a.Name == b.Name))
答案 2 :(得分:1)
尝试使用此代码:
List<BType> result = B.Where(x >= A.Exists(y => y.Name == x.Name)).ToList();
通过这种方式,您只保留人员列表中存在的经理。
答案 3 :(得分:1)
您也可以使用Intersect。 例如:
public class Person
{
public string Name { get; set; }
}
public class PersonEqualityComparer : IEqualityComparer<Person>
{
public bool Equals(Person x, Person y)
{
return x.Name.Equals(x.Name);
}
public int GetHashCode(Person obj)
{
return obj.Name.GetHashCode();
}
}
现在你可以使用:
var persons = new List<Person>() { new Person { Name = "John" } };
var managers = new List<Person>() { new Person { Name = "John" } };
var results = persons.Intersect(managers, new PersonEqualityComparer());
如果你想比较两个不同的类,只需编辑Comparer。