LINQ 将集合 A 中的对象与集合 B 进行匹配
本文关键字:集合 对象 LINQ | 更新日期: 2023-09-27 18:31:42
假设我们有 2 组
A= [ 人物 A,人物 B];
B = [ 经理Z,经理T,经理Y];
结果 : 经理 T,经理 Y
A 中的对象和 B 中的对象之间存在一对一映射。我对 B 中那些在 A 中存在此类条目的对象感兴趣。
为了完整起见,假设我们正在匹配名为 Name
的属性
尝试关注
SetB.Where(b => SetA.Any(a => a.Name == b.Name))
您必须在两个列表上执行联接:
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
.
尝试使用以下代码:
List<BType> result = B.Where(x >= A.Exists(y => y.Name == x.Name)).ToList();
这样,您只能维护人员列表中存在的经理。
您也可以使用相交。例:
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());
如果您想比较两个不同的类,只需编辑比较器。