Data l'espressione lambda in basso in cui il tipo Provincia contiene una proprietà pubblica "byte ID Paese" e il tipo Paese che contiene una proprietà pubblica "ID byte".Compilazione espressione lambda
Expression<Func<Province, bool>> exp = p => p.CountryId == country.Id;
Expression viene in seguito utilizzato dal provider Linq di NHibernate e ha generato un'eccezione. Quando ho controllato l'espressione variable exp, ho scoperto che entrambi i lati dell'operatore di uguaglianza sono stati convertiti in Int32.
{p => (Convert(p.CountryId) = Convert(value
(AddressToGo.Business.Default.AddressComponents+<>c__DisplayClass0).country.Id))}
non riesco a capire il motivo per cui l'operatore di uguaglianza per due valori di byte ha bisogno di quei valori per essere convertito in Int32 anticipo. Ho scritto l'espressione direttamente senza lasciare che sia il compilatore a farlo per me. La seguente espressione viene convertita dal provider di Linq di NHibernate.
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
);
Quindi, ci deve essere un motivo per cui il compilatore emette l'espressione di conversione di tipo. Qualche idea?
Richiede un tag di lingua. –