将方法体写为Expression<>

时间:2014-04-28 09:35:46

标签: c# lambda expression

我想将方法​​中的逻辑转换为Expression,以便我可以存储它,并在需要时可以编译它以便执行。

该方法具有类似

的流程

1)采用参数

2)对传入参数

的集合属性执行'FirstOrDefault'

3)在存储库类上调用一些方法

4)一些条件

5)创建/实例化某些字段

等等。在所有复杂的方法中做了很多事情。

问题:是否有任何文章/资源可以通过示例向我展示。

由于

1 个答案:

答案 0 :(得分:1)

MSDN出了什么问题?您可以在此处找到示例(位于页面底部): http://msdn.microsoft.com/en-us/library/bb397951.aspx

这样的事情:

static Expression<Action<IEnumerable<int>>> BuildExpression()
{
    ParameterExpression param1 = Expression.Parameter(typeof(IEnumerable<int>), "param1");
    Expression<Func<IEnumerable<int>, int>> firstOrDefault = collection => collection.FirstOrDefault();
    Expression body = Expression.Condition(
        Expression.LessThan(
            Expression.Invoke(firstOrDefault, param1),
            Expression.Constant(10)),
        Expression.Call(
            typeof(Console).GetMethod("WriteLine", new [] { typeof(string) }),
            Expression.Constant("Less")),
        Expression.Call(
            typeof(Console).GetMethod("WriteLine", new [] { typeof(string) }),
            Expression.Constant("Greater or equal"))
        );
    return Expression.Lambda<Action<IEnumerable<int>>>(body, new[] { param1 });
}