유창한 nhibernate로 동적 기본 매핑을 만들려고합니다.Func <DerivedFromT, object>에서 Func으로 구성원 액세스 func 캐스팅 <T,object>
내가이 BaseMap에 < T>에 의해 확인됩니다하고 있어요 : ClassMap < T> 예를 들어 같은 경우 (대해서 typeof (ICategorizedEntity) .IsAssignableFrom (대해서 typeof (T)))
그렇다면, I 싶어 ICategorizedEntity의 인터페이스에 속한다 "분류"라는 이름의 속성을 매핑하지만지도 (Func을) 기능은 T의 속성을 허용, 그래서 LINQ와 약간의 추측 노력이 함께했다 : '케이
Expression<Func<ICategorizedEntity, object>> exp = x => x.Category;
var parameter = Expression.Parameter(typeof (T));
var lmd = Expression.Lambda<Func<T, object>>(exp, parameter);
Map(lmd);
'지도'기능의 깊은 곳에서 다음을 확인하기 때문에 작업하지 않아도됩니다.
MemberExpression memberExpression = (MemberExpression) null;
if (expression.NodeType == ExpressionType.Convert)
memberExpression = ((UnaryExpression) expression).Operand as MemberExpression;
else if (expression.NodeType == ExpressionType.MemberAccess)
memberExpression = expression as MemberExpression;
if (enforceCheck && memberExpression == null)
throw new ArgumentException("Not a member access", "expression");
그리고 "회원 액세스 권한이 없습니다 \ r \ n 매개 변수 이름 : 표현식"이 표시됩니다.
MemberExpression 또는 이와 비슷한 작업을 어떻게 만들 수 있습니까?
감사합니다,하지만 난 당신이 오해 생각 나는 성취하려고 노력했다. 좋은 변환으로 트릭을 만들었습니다. 지도 (x => ((ICategorizedEntity) x) .Category); –
나는 정말 내 질문을 이해하지 못했다는 것을 인정한다. 그래서 내 게시물은 주로 당신의 타이틀을 기반으로했다. 그러나, 나는 아마 당신이 요구 한 in-lambda 캐스팅을 수행하는 코드의 마지막 줄에 대답이 있다고 가정했다. – Douglas
네, 저에게 답을주었습니다. –