我试图了解动态表达式的工作原理。因此,出于学习目的,我想做以下事情:
我有一个对象,我当前可以使用一个使用lambda表达式的Linq语句访问:
someObj.IncludeStory(x => x.News);
我想做的是用字符串替换labmda x => x.News
,例如:
string myLambda = "x => x.News";
someObj.IncludeStory(myLambda);
显然你不能这样做,但据我所知,你可以用动态表达式(?)实现一些相同的效果。
我一直在查看System.Linq.Dynamic源代码,以了解这应该如何运作。但这只会让我更加困惑。我认为图书馆对我想要的东西来说太复杂了。我不需要排序,分组和所有那些花哨的东西。
基本上我的问题是:
x => x.News
?我发现很难开始这个。
var expression = @"IncludeStory(x => x.News)";
var p = Expression.Parameter(someObj.GetType(), "News");
var e = myAlias.DynamicExpression.ParseLambda(new[] { p }, null, expression);
var result1 = e.Compile().DynamicInvoke(someObj);
答案 0 :(得分:1)
您可以使用DynamicExpression.ParseLambda将字符串转换为表达式树。有关更多详细信息,请参阅VS2010 C附带的项目:\ Program Files(x86)\ Microsoft Visual Studio 10.0 \ Samples \ 1033 - > CSharpSamples - > LinqSamples - > DynamicQuery(我认为是安装更高版本的一部分)