Sri*_*han 2 c# expression-trees
我试图ToLower使用下面的Expression调用将字符串转换为case.
var tolowerMethod = typeof(string).GetMethods().Where(m => m.Name == "ToString").FirstOrDefault();
var toLowerMethodCall = Expression.Call(memExp,tolowerMethod,new Expression[0]);
Run Code Online (Sandbox Code Playgroud)
我面临一些问题,要创建一个Expression调用来格式化一个值,如:"05/12/2012 12:00:00"to {0:MM/dd/yyyy}.
Jef*_*ado 12
那么没有这样的方法可以采用一种格式的日期字符串并将其重新格式化为另一种格式.你必须将该字符串转换为a DateTime然后再转换为a string.
这是你如何创建这样一个lambda:
var dateStr = Expression.Parameter(typeof(string));
var asDateTime = Expression.Call(typeof(DateTime), "Parse", null, dateStr); // calls static method "DateTime.Parse"
var fmtExpr = Expression.Constant("MM/dd/yyyy");
var body = Expression.Call(asDateTime, "ToString", null, fmtExpr); // calls instance method "DateTime.ToString(string)"
var lambdaExpr = Expression.Lambda<Func<string, string>>(body, dateStr);
Run Code Online (Sandbox Code Playgroud)
然后编译并调用它.
var method = lambdaExpr.Compile();
method("05/12/2012 12:00:00"); // "05/12/2012"
Run Code Online (Sandbox Code Playgroud)