用动态表达式构建一个简单的lambda

时间:2015-12-24 20:40:39

标签: c# linq lambda linq-expressions

我试图了解动态表达式的工作原理。因此,出于学习目的,我想做以下事情:

我有一个对象,我当前可以使用一个使用lambda表达式的Linq语句访问:

someObj.IncludeStory(x => x.News);

我想做的是用字符串替换labmda x => x.News,例如:

string myLambda = "x => x.News";
someObj.IncludeStory(myLambda);

显然你不能这样做,但据我所知,你可以用动态表达式(?)实现一些相同的效果。

我一直在查看System.Linq.Dynamic源代码,以了解这应该如何运作。但这只会让我更加困惑。我认为图书馆对我想要的东西来说太复杂了。我不需要排序,分组和所有那些花哨的东西。

基本上我的问题是:

  1. 我可以使用动态表达式生成类似动态的lambda:x => x.News
  2. 如果是这样,那么我将如何使用动态表达式?
  3. 我发现很难开始这个。

    我尝试的是:

            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);
    

1 个答案:

答案 0 :(得分:1)

您可以使用DynamicExpression.ParseLambda将字符串转换为表达式树。有关更多详细信息,请参阅VS2010 C附带的项目:\ Program Files(x86)\ Microsoft Visual Studio 10.0 \ Samples \ 1033 - > CSharpSamples - > LinqSamples - > DynamicQuery(我认为是安装更高版本的一部分)