0
我已經閱讀了關於動態創建lambda表達式的堆棧,這裏有很多很好的答案,但無法自己創建。如何動態創建e.ID == id lambda表達式
我需要從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
」lambda的一部分。如何製作「== id
」的一部分?
只是聲明'param'爲'typeof運算(對象)'和'ID'訪問添加一個'轉換(PARAM,modelType)'。而你搞定了。 OP還將'ID'轉換爲'int',這可能是多餘的也可能不是多餘的。 –
@MikeStrobel是的我最初試圖找出他們的意圖是在那裏。 – Nkosi
修正了參數類型,使您可以將lambda表示爲'Func