Dada la expresión lambda a continuación donde el tipo de provincia contiene una propiedad pública "byte CountryId" y un tipo de país que contiene una propiedad pública "Id de byte".Compilación de expresiones Lambda
Expression<Func<Province, bool>> exp = p => p.CountryId == country.Id;
La expresión es utilizada posteriormente por el proveedor NHibernate Linq y lanzó una excepción. Cuando inspeccioné la variable de expresión exp, descubrí que ambos lados del operador de igualdad se convirtieron a Int32.
{p => (Convert(p.CountryId) = Convert(value
(AddressToGo.Business.Default.AddressComponents+<>c__DisplayClass0).country.Id))}
no puedo entender por qué el operador de igualdad para los dos valores de byte necesita esos valores que ser convertido a Int32 antemano. Escribí la expresión directamente sin dejar que el compilador lo haga por mí. La siguiente expresión es convertida por el proveedor NHibernate Linq muy bien.
ParameterExpression prm = Expression.Parameter(typeof(Province), "p");
Expression<Func<Province, bool>> exp =
Expression.Lambda<Func<Province, bool>>
(
Expression.Equal
(
Expression.MakeMemberAccess(prm, typeof(Province).GetProperty("CountryId")),
Expression.Constant(country.Id, typeof(byte))
),
prm
);
Por lo tanto, debe haber una razón por la cual el compilador emite la expresión con conversión de tipo. ¿Algunas ideas?
Necesita una etiqueta de idioma. –