C# 如何在第一个集合中创建集合contain id记录,在第二个集合中创建相等id记录?

C# 如何在第一个集合中创建集合contain id记录,在第二个集合中创建相等id记录?,c#,C#,在数据库中,我有两个表: public partial class PersonOne { public int id { get; set; } public string name { get; set; } public string surname { get; set; } } public partial class PersonTwo { public int id { get; set; } public string firstname

在数据库中,我有两个表:

public partial class PersonOne
{
    public int id { get; set; }
    public string name { get; set; }
    public string surname { get; set; }
}

public partial class PersonTwo
{
    public int id { get; set; }
    public string firstname { get; set; }
    public string lastname { get; set; }
}
我想填写我的表格:

public class PersonOnePersonTwo
{
    public int PersonOneId { get; set; }
    public int PersonTwoId { get; set; }
}
其中PersonOne.name==PersonTwo.firstname&&PersonOne.lasname==PersonTwo.lastname,但我不知道如何做到这一点-因为下面的代码效率不高,速度太慢:

    List<PersonOne> personOneList = new List<PersonOne>();
    List<PersonTwo> personTwoList = new List<PersonTwo>();

    List<PersonOnePersonTwo> personOnePersonTwoList = new List<PersonOnePersonTwo>();

foreach (PersonOne personOne in personOneList)
{
    foreach(PersonTwo personTwo in personTwoList.Where(x => x.firstname == personOne.name && x.lastname == personOne.surname).ToList())
    {
        personOnePersonTwoList.Add(new PersonOnePersonTwo
            {
                PersonOneId = personOne.id,
                PersonTwoId = personTwo.id
            });
    }
};
试试这个:

var result = personOneList.Join
             (
                personTwoList, 
                person1 => new { Key1 = person1.Name, Key2 = person1.Surname }, 
                person2 => new { Key1 = person2.FirstName, Key2 = person2.LastName }, 
                (person1, person2) => new PersonOnePersonTwo { PersonOneId = person1.Id, PersonTwoId = person2.Id }
             ).ToList();
我同意:

    var personOnePersonTwoList = new List<PersonOnePersonTwo>();

    foreach (var personOne in personOneList)
    {
        personOnePersonTwoList = personTwoList.Where(x => x.firstname.Equals(personOne.name, StringComparison.OrdinalIgnoreCase) && 
                                                          x.lastname.Equals(personOne.surname, StringComparison.OrdinalIgnoreCase))
                                              .Select(x => new PersonOnePersonTwo {PersonOneId = personOne.id, PersonTwoId = x.id}).ToList();
    };

作为旁注:比较字符串时使用Equals更方便。

不幸的是,它太慢了:/