¿Cómo se crea una implementación de igualdad dinámica donde se pueden pasar los nombres de propiedades que se compararán?

Digamos que tengo una persona objeto con las siguientes propiedades:

    public class Person
    {
        public int ID { get; set; }
        public int EmployeeNo { get; set; }
        public string JobDescription { get; set; }
        public string Code { get; set; }
    }

¿Cómo puedo verificar dinámicamente la igualdad de propiedades específicas por nombre?

p.ej.

var dynamicEqualityComparer = RetrieveDynamicEqualityComparer("ID", "JobDescription");
var intersectedPersons = listOfPerson1.Intersect(listOfPerson2, dynamicEqualityComparer);

El fragmento de código anterior usaría el método de intersección de linq predeterminado utilizando el método de comparación de igualdad generado dinámicamente que solo compara los campos "ID" y "Descripción del trabajo".

Supongo que algo como esto hubiera sido fácil de encontrar, pero hasta ahora no he podido localizar nada por el estilo.

Respuestas a la pregunta(2)

Su respuesta a la pregunta