比较两个不同对象的列表

use*_*308 -1 c# linq

我有以下清单.

一个包含Person对象的列表具有Id&Name属性.People对象的其他列表具有Id,Name和Address属性.

List<Person> p1 = new List<Person>();
p1.Add(new Person() { Id = 1, Name = "a" });
p1.Add(new Person() { Id = 2, Name = "b" });
p1.Add(new Person() { Id = 3, Name = "c" });
p1.Add(new Person() { Id = 4, Name = "d" });

List<People> p2 = new List<People>();
p2.Add(new People() { Id = 1, Name = "a", Address=100 });
p2.Add(new People() { Id = 3, Name = "x", Address=101 });
p2.Add(new People() { Id = 4, Name = "y", Address=102 });
p2.Add(new People() { Id = 8, Name = "z", Address=103 });
Run Code Online (Sandbox Code Playgroud)

想要过滤列表,所以我使用下面的代码.但代码返回ID列表.我希望List of People对象具有匹配的ID.

var filteredList = p2.Select(y => y.Id).Intersect(p1.Select(z => z.Id));
Run Code Online (Sandbox Code Playgroud)

ReP*_*rre 7

你最好的 Join

var filteredList = p2.Join(p1, 
        people => people.Id, 
        person => person.Id, 
        (people, _) => people)
    .ToList();
Run Code Online (Sandbox Code Playgroud)

该方法将通过您所提供的密钥相匹配,从两份名单的项目- Id中的PeopleIdPerson类.对于people.Id == person.Id应用选择器功能的每一对(people, _) => people.函数说对于每对匹配peopleperson只给我people实例; 我不在乎person.