如何在C#中将表达式理解为方法参数

时间:2019-10-03 14:43:37

标签: c# .net .net-core

我开始看到越来越多的方法使用下面的方法,但这是我不完全了解的概念。

    public virtual Task<List<T>> GetAsync(Expression<Func<T, bool>> exp)
    {
        using (var conn = _factory.OpenDbConnection())
        {
            return conn.SelectAsync(exp);
        }
    }

有人可以帮我翻译那里是表达式的方法参数吗?像解释它与标准实例参数有何不同?

1 个答案:

答案 0 :(得分:1)

这些被称为Expression Treeshttps://docs.microsoft.com/en-us/dotnet/csharp/programming-guide/concepts/expression-trees/)。

基本上,这是一个lamdba,可以从您所用的某种数据库的外观转换为另一个平台。该function将(由库)翻译为SQL,然后在数据库中执行。

在程序代码中,通常只需要lambdasFunc<>),但是在某些情况下,您需要Expression Tree。除了示例之外,有时还需要使用这些函数可以动态构建的函数。

有关lambdas的一般信息,可以在这里找到:https://docs.microsoft.com/en-us/dotnet/csharp/programming-guide/statements-expressions-operators/lambda-expressions