我想做一個幫助器方法,使用表達式樹創建一個動態選擇器。創建類型二進制表達式編程
目標是將此選擇器轉換爲表達式樹。
var list = new User[0].AsQueryable();
var q = list.Select(u => new { User = u, Address = "Address X", Fax = "Fax Y" });
表達式樹可視化工具就說明是這樣的:
這裏是我到目前爲止已經試過:
var userParam = Expression.Parameter(typeof(User), "u");
var obj = new { User = new User(), Address = string.Empty, Fax = string.Empty };
var q = list.Select(DynamicSelect(obj, userParam));
static Expression<Func<User, T>> DynamicSelect<T>(T obj, ParameterExpression userParam)
{
var user = Expression.Lambda<Func<User, User>>(/* ?? stuck here */, userParam);
var newExpression = Expression.New(
typeof(T).GetConstructor(new []{typeof(User), typeof(string), typeof(string)}),
user,
Expression.Constant("Address X"),
Expression.Constant("Fax Y"),
);
return Expression.Lambda<Func<User, T>>(newExpression, userParam);
}
你的代碼似乎試圖創建類似於'u => new {User = u =>/*卡在這裏* /,Address =「Address X」,Fax =「Fax Y」}''。你爲什麼這樣做?你爲什麼試圖在lambda中使用lambda,這對我沒有任何意義。 – svick 2014-09-30 10:51:03