Recientemente recibí un error "El mapeo de la interfaz ..... no es compatible", que resolví basándome en this thread. Para demostrar:Diferencia entre == y .Equals() con interfaces y LINQ
public interface IMyInterface { string valueText { get; set; } }
public class MyData : IMyInterface
{
int ID { get; set;}
string valueText { get; set;}
}
public class MyOtherData : IMyInterface
{
long ID { get; set;}
string valueText { get; set;}
}
y
public static IEnumerable<T> GetByValue<T>(string value) : where T : class, IMyInterface, new()
{
using (var context = new DataContext())
{
// The important line
return context.GetTable<T>().Where(x => x.valueText == value);
}
}
La ejecución de este código, me gustaría obtener un NotSupportedException: "El mapeo de miembro de interfaz IMyInterface.valueText no es compatible". Sin embargo, si reemplazo el x.valueText == value
con x.valueText.Equals(value)
, esto funciona del todo como se esperaba.
He resuelto esto en mi código, pero quiero entender por qué se comporta de esta manera. ¿Alguien puede explicarlo?
Actualización: Según mi comentario a continuación, el equipo de LINQ to SQL cerró esto como "No se corregirá". Creo que eso significa que ahora cuenta como un error conocido, pero que no se resolverá en el corto plazo. Sin embargo, me gustaría saber por qué se comporta de manera diferente en primer lugar.
Después de leer el hilo que enlazó, diría que esto parece un error. – phoog
@phoog, asumiría un error también, excepto que hay un error explícito para ello. Lo que significa que algo tiene que verificar ese escenario. Podría ser un tipo de error "se olvidó de agregar la lógica" o una excepción codificada para evitar un error, pero en sí mismo, creo que la excepción es el comportamiento "correcto". – Bobson
@ Bobson, ¿se ha conectado para ver si alguien ha denunciado el error? Un par de personas en el hilo vinculado hablaron sobre eso, pero parece que nadie tuvo suficiente iniciativa para hacerlo por sí mismo. – phoog