我开始看到越来越多的方法使用下面的方法,但这是我不完全了解的概念。
public virtual Task<List<T>> GetAsync(Expression<Func<T, bool>> exp)
{
using (var conn = _factory.OpenDbConnection())
{
return conn.SelectAsync(exp);
}
}
有人可以帮我翻译那里是表达式的方法参数吗?像解释它与标准实例参数有何不同?
答案 0 :(得分:1)
这些被称为Expression Trees
(https://docs.microsoft.com/en-us/dotnet/csharp/programming-guide/concepts/expression-trees/)。
基本上,这是一个lamdba
,可以从您所用的某种数据库的外观转换为另一个平台。该function
将(由库)翻译为SQL
,然后在数据库中执行。
在程序代码中,通常只需要lambdas
(Func<>
),但是在某些情况下,您需要Expression Tree
。除了示例之外,有时还需要使用这些函数可以动态构建的函数。
有关lambdas
的一般信息,可以在这里找到:https://docs.microsoft.com/en-us/dotnet/csharp/programming-guide/statements-expressions-operators/lambda-expressions