我想將一個簡單的 LambdaExpression 轉換為 sql 查詢。我試圖通過使用這樣的 ExpressionTrees 來做到這一點:
Expression<Func<Person, bool>> exp = (person) => person.ID == 5;
當運算式中的 where 是一個常量右節點時,我可以檢索資料并且我得到這樣的字典:
new Dictionary<string, object>() { { "ID", 5 } };
但是當右節點有屬性訪問時,我的代碼失敗了,因為MemberExpression不能轉換成ConstantExpression。例如,我無法從這個 lambda 運算式中獲取人員 ID 值:
Person person = new Person()
{
ID = 1,
Name = "Test",
Lastname = "Test"
};
Expression<Func<Person, bool>> exp = (p) => p.ID == person.ID;
問題:當右節點有屬性訪問時,如何從 LambdaExpression 中檢索正文資料。
uj5u.com熱心網友回復:
如果你想直接寫下表達我認為你不能像這樣使用person。這不是“獨立的”,而是來自外部。如果你想寫下運算式,你需要讓 person 在運算式中可以訪問。據我了解,您正在尋找這樣的東西:
public static Expression<Func<Person, bool>> GetPredicate(
Person person)
{
var parameter = Expression.Parameter(typeof(Person), "o");
var propertyInfo = typeof(Person).GetProperty(nameof(Person.Name));
var expression = Expression.Equal(
Expression.Constant(propertyInfo.GetValue(person)),
Expression.Property(parameter, propertyInfo));
return Expression.Lambda<Func<Person, bool>>(expression, parameter);
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/386494.html
上一篇:QtCreator中的“LNK1104:無法打開檔案mclmcrrtd.lib”錯誤
下一篇:使用動作遍歷類屬性?
