私の究極の目標は、ラムダ式のネストされたプロパティを反復し、いずれかのプロパティがnullであるかどうかを判断することですが、表現。MemberExpressionからラムダ式を作成するにはどうすればいいですか
このダミーメソッドください:Compile.execラインで
public static void DoStuff<TModelDetail, TValue>(Expression<Func<TModelDetail, TValue>> expr, TModelDetail detail)
{
var memberExpression = expr.Body as MemberExpression;
if (memberExpression == null && expr.Body is UnaryExpression)
{
memberExpression = ((UnaryExpression)expr.Body).Operand as MemberExpression;
}
var pe = Expression.Parameter(typeof(TModelDetail), "x");
var convert = Expression.Convert(memberExpression, typeof(object));
var wee = Expression.Lambda<Func<TModelDetail, object>>(convert, pe);
var hey = wee.Compile()(detail);
}
を私は次のエラーを取得する:
ブラブラはTModelDetailのタイプであるvariable 'x' of type 'Blah' referenced from scope '', but it is not defined
。
メンバーエクスプレッションでラムダを構築するにはどうすればよいですか?私が最終的にやりたいことは、ルートメンバー式を再帰的に探し出し、それがヌルかどうかを判断してバブルアップし、各後続メンバー式がヌルかどうかを判断することです。
新しいパラメータを作成しないでください。ただし、これはメンバー式で使用されるため、 'expr'のパラメータを使用しないでください。現在、 'wee'は' x => y.Member'(yは 'expr'のパラメータです)のようなものですが、これは意味をなさないものです。 – ckuri
@ckuriそうだね。私はそれを正しいものとしてマークすることができますので、これを答えとして入れてください。 – dtryan
あなたの提案に従ってください。 – ckuri