An object-oriented and type-safe programming language that has its roots in the C family of languages and includes support for component-oriented programming.
You could use LINQ Join:
var person1 = new Person("1", "Paul");
var person2 = new Person("2", "John");
var person3 = new Person("3", "Jess");
var list1 = new[] { person1, person2, person3 };
var list2 = new[] { person1, person2 };
var joined = list1.Join(inner: list2,
outerKeySelector: p1 => p1.Id,
innerKeySelector: p2 => p2.Id,
resultSelector: (p1, p2) => new { First = p1, Second = p2 }
);
foreach (var pair in joined) {
Console.WriteLine($"{pair.First.FirstName} -> {pair.Second.FirstName}");
}
record Person(string Id, string FirstName);
Produces:
Paul -> Paul
John -> John
You'd just want to join by Name instead of Id. This is equivalent to an INNER JOIN in SQL.