지방 유형에 "byte CountryId"공용 속성이 있고 "byte Id"공용 속성이 포함 된 국가 유형이있는 아래의 람다식이 제공됩니다.람다 표현식 컴파일
Expression<Func<Province, bool>> exp = p => p.CountryId == country.Id;
표현식은 나중에 NHibernate Linq 공급자가 사용하고 예외를 던졌습니다. 표현식 변수 exp를 검사했을 때, 동등 연산자의 양쪽이 Int32로 변환된다는 것을 알았습니다.
{p => (Convert(p.CountryId) = Convert(value
(AddressToGo.Business.Default.AddressComponents+<>c__DisplayClass0).country.Id))}
2 바이트 값의 항등 연산자가 그 값을 Int32로 변환해야하는지 이해할 수 없습니다. 필자는 컴파일러가 나를 대신 할 수있는 식을 직접 작성했다. 다음 표현식은 NHibernate Linq 공급자에 의해 변환됩니다.
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
);
따라서 컴파일러가 형식 변환을 통해 표현식을 출력해야하는 이유가 있어야합니다. 어떤 아이디어?
언어 태그가 필요합니다. –