¿Podemos obtener acceso a la función de copia y actualización de F # desde c #?

Por ejemplo en F # podemos definir

type MyRecord = {
    X: int;
    Y: int;
    Z: int 
    }

let myRecord1 = { X = 1; Y = 2; Z = 3; }

Y para actualizarlo puedo hacerlo.

let myRecord2 = { myRecord1 with Y = 100; Z = 2 }

Eso es genial, y el hecho de que los registros implementen automáticamente la igualdad de calidad de las carreteras sin ningún esfuerzo adicional me hace desear esto en C #. Sin embargo, tal vez pueda definir mis registros en F # pero aún así poder realizar algunas actualizaciones en C #. Me imagino una API como

MyRecord myRecord2 = myRecord
    .CopyAndUpdate(p=>p.Y, 10)
    .CopyAndUpdate(p=>p.Z, 2)

¿Hay alguna manera, y no me importan los hacks sucios, para implementar CopyAndUpdate como anteriormente? La firma C # para CopyAndUpdate sería

T CopyAndUpdate<T,P>
   ( this T
   , Expression<Func<T,P>> selector
   , P value
   )

Respuestas a la pregunta(3)

Su respuesta a la pregunta