Aşağıdaki tür lambda ifadesi verildiğinde, aşağıdaki türde bir yerel özellik "bayt ÜlkeDeği" ve bir ortak özellik "bayt Kimliği" içeren Ülke türü bulunur.Lambda ifade derlemesi
Expression<Func<Province, bool>> exp = p => p.CountryId == country.Id;
İfade daha sonra NHibernate Linq sağlayıcısı tarafından kullanılır ve bir istisna attı. İfade değişkeni exp'i incelediğimde, eşitlik operatörünün her iki tarafının da Int32'ye dönüştürüldüğünü öğrendim. İki bayt değerleri için eşitlik operatörü önceden Int32 dönüştürülmesi bu değerler neden ihtiyaç
{p => (Convert(p.CountryId) = Convert(value
(AddressToGo.Business.Default.AddressComponents+<>c__DisplayClass0).country.Id))}
anlayamıyorum. Derleyicinin benim için yapmasına izin veren ifadeyi doğrudan yazdım. Aşağıdaki ifade, NHibernate Linq sağlayıcısı tarafından iyi bir şekilde dönüştürülür.
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
);
Bu nedenle, derleyicinin ifadeyi tür dönüşümü ile çıkarmasının bir nedeni olması gerekir. Herhangi bir fikir?
Bir dil etiketine ihtiyacı var. –