0
ラムダ式の動的作成について、ここで多くの素晴らしい解答を読みましたが、自分では作成できません。e.ID == idラムダ式を動的に作成する方法
DBからエンティティをID
で選択する必要がありますが、そのタイプは事前にわかりません。タイプの名前のみ。だから、私は自分のコードに推測
var modelType = Assembly.Load("Models").GetTypes().First(t => t.Name == type + "Model");
MethodInfo method = typeof(CommonRepository).GetMethod("GetByExpression",
BindingFlags.Instance | BindingFlags.Public);
var arg = Expression.Constant(null, modelType);
var body = Expression.Convert(Expression.PropertyOrField(arg, "ID"),
typeof(int));
var lambda = Expression.Lambda<Func<object, bool>>(body);
var model = method.Invoke(this, new object[] { lambda });
var field = modelType.GetProperty("Disable", BindingFlags.Instance);
field.SetValue(model, false);
this.marathonRepository.SaveOrUpdate(model);
私はラムダの「e.ID
」の部分を作りました。 "== id
"の作り方?
はちょうど 'typeof演算(オブジェクト)として' param'を ''宣言し、ID'アクセサに ''変換(パラメータ、modelType)を追加し、あなたがしましたばっちり成功。 OPはまた 'ID'を' int'に変換しました。これは余分なものだったかもしれません。 –
@MikeStrobelはい私は最初、彼らの意図がそこにあったかを理解しようとしていました。 – Nkosi
'Func , bool>'とは対照的に、 '?'が静的に知られていないラムダを 'Func