私は流暢なnhibernateで動的な基本マッピングを作成しようとしています。メンバーアクセスfuncをFunc <DerivedFromT、object>からFuncにキャスト<T,object>
私はベースマップ< T>によってチェックインされてやっている:のClassMap < T>たとえば場合: (typeof演算(ICategorizedEntity).IsAssignableFrom(typeof演算(T)))
そうであれば、IたくはICategorizedEntityのインターフェイスに属し、「カテゴリー」という名前のプロパティをマッピングしますが、マップ(機能)関数はTのプロパティを受け入れるので、私は、LINQと少しを推測しようとしたし、この思い付いた:「doesnの
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);
'Map'関数の深い内部で次のことをチェックするので、作業しません:
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などを作成してキャストするにはどうすればよいですか?
おかげで、しかし、私はあなたが何を誤解だと思います私は達成しようとした.. 良い古い変換は、このトリックでした: Map(x =>((ICategorizedEntity)x).Category); –
私は本当にあなたの質問を理解していないと認めます。私の投稿は主にあなたのタイトルに基づいていました。しかし、私は、あなたが必要とするインラムダキャストを実行するコードの最後の行に、おそらく答えがあると仮定しました。 – Douglas
うん、それは私に答えを与えた –