我新的表達式樹,我需要轉換的下面拉姆達表達式樹在表達式中使用ToString方法在第一樹
Data.Where(s => s.Property.ToString().StartsWith("My Search Data"));
但是我已經高達
Data.Where(s => s.Property.StartsWith("My Search Data");
做現在我在使用StartsWith之前需要使用ToString方法。
以下是我的示例代碼。
ParameterExpression e = Expression.Parameter(typeof(T), "e");
PropertyInfo propertyInfo = typeof(T).GetProperty(field);
MemberExpression m = Expression.MakeMemberAccess(e, propertyInfo);
ConstantExpression c = Expression.Constant(data, typeof(string));
MethodInfo mi = typeof(string).GetMethod("StartsWith", new Type[] { typeof(string) });
Expression call = Expression.Call(m, mi, c);
Expression<Func<T, bool>> lambda = Expression.Lambda<Func<T, bool>>(call, e);
query = query.Where(lambda);
工作完美。真的非常感謝我的內心深處。你能否建議我爲Expression Tree寫一本好書 –
在我看來,你必須先學習.NET的第一反思和東西。爲此,我會推薦Jeffrey Richter的「CLR via C#」。接下來,你可以嘗試開始玩他們(我學會了他們,直到通過在家裏玩Expression API來掌握他們)。作爲練習,嘗試獲取任何函數(不管是什麼,但從簡單的開始),並嘗試將其轉換爲表達式樹(或至少其中的一部分)。做這個翻譯,直到你掌握它們。 –
或者查看反編譯的代碼,看看編譯器如何將您的lambda表達式轉換爲表達式API – MBoros